Sobes.tech
Back to questions
Junior — Middle
83

Обеспечивается ли добавление элемента в конец вектора высокой производительностью с постоянной временной сложностью?

Companies where asked
ARQA

Answer from AI

sobes.tech AI

В стандартной реализации std::vector добавление элемента в конец (push_back) обычно имеет амортизированную константную временную сложность. Это значит, что в большинстве случаев операция выполняется за O(1), но иногда, когда вектор достигает своей текущей ёмкости, происходит перераспределение памяти и копирование элементов в новый буфер, что занимает O(n) времени.

Таким образом, добавление элемента в конец вектора не гарантирует строго постоянную временную сложность, но амортизированно — да. Это обеспечивает высокую производительность при последовательных добавлениях.

Пример:

std::vector<int> v;
for (int i = 0; i < 1000; ++i) {
    v.push_back(i); // амортизированно O(1)
}