Удаление списка C # с конца, правда O (n)?

Мне было бы интересно видеть то, что происходит, если Вы открываете одну из этих форм в разработчике и сохраняете ее; или измените его и сохраните его; или сделайте одно из вышеупомянутого после создания .designer.cs файла только с пустой оболочкой частичного класса. Меня не удивило бы найти разработчика, помещающего, по крайней мере, изменения в .designer.cs файл.

27
задан Olhovsky 22 March 2011 в 18:45
поделиться

2 ответа

В общем случае List<T>::RemoveAt равно O (N) из-за необходимости сдвигать элементы после индекса вверх по слоту в массиве. Но для конкретного случая удаления из конца списка сдвиг не требуется и, следовательно, это O (1)

28
ответ дан 28 November 2019 в 05:36
поделиться

Это должно дать вам представление

    public void RemoveAt(int index) {
        if ((uint)index >= (uint)_size) { 
            ThrowHelper.ThrowArgumentOutOfRangeException(); 
        }
        _size--; 
        if (index < _size) {
            Array.Copy(_items, index + 1, _items, index, _size - index);
        }
        _items[_size] = default(T); 
        _version++;
    } 
2
ответ дан 28 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: