Контакты

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (3)
  • Почему доступ к элементам vector-а O(1)?

    @Irval
    Дело в том, что std::vector - достаточно хитрая структура, использующая непрерывные блоки памяти для реализации "динамического" массива. Сам объект хранит в себе 2 различных размера - capacity (вместимость) и непосредственно size. Последний численно равен количеству добавленных Вами элементов, а вот с capacity дела обстоят чуточку сложнее.
    Как Вы, думаю знаете, амортизационная асимптотика вставки элемента в вектор равна O(1). Это достигается благодаря "разрастанию" capacity вдвое каждый раз, когда размер массива переваливает за его вместимость. Структура ищет в памяти блок, размер которого равен 2 * capacity и объявляет его занятым, после чего перемещает всю информацию туда. Поскольку массив хранится на непрерывном участке памяти, то к нему вполне применима адресная арифметика, то есть расстояние от первого элемента вектора до i-ого равно sizeof(datatype) * i. Именно благодаря этому доступ к произвольному элементу осуществляется за константное время.

    Условия, который были описаны Вами, относятся к указательным структурам данных, где каждый элемент указывает на следующий/предыдущий.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (1)