Назад к вопросам
Junior — Middle
84
Обеспечивается ли добавление элемента в конец вектора высокой производительностью с постоянной временной сложностью?
Компании, где спрашивали
ARQA
Ответ от нейросети
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)
}