Sobes.tech
Back to questions
Junior — Middle
93

Какие алгоритмы применяются при удалении элемента из std::vector, и какую временную сложность это влечёт за собой?

Companies where asked
Телкор

Answer from AI

sobes.tech AI

При удалении элемента из std::vector используется алгоритм сдвига всех элементов, следующих за удаляемым, на одну позицию влево, чтобы заполнить образовавшийся пробел. Это связано с тем, что std::vector хранит элементы в непрерывном блоке памяти.

Временная сложность удаления элемента зависит от позиции:

  • Если удаляется последний элемент, операция выполняется за O(1), так как просто уменьшается размер вектора.
  • Если удаляется элемент в середине или начале, все последующие элементы сдвигаются, что даёт O(n) в худшем случае, где n — количество элементов после удаляемого.

Пример удаления элемента по индексу:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    int index_to_remove = 2; // удаляем элемент со значением 3

    v.erase(v.begin() + index_to_remove);

    for (int x : v) {
        std::cout << x << ' ';
    }
    // Вывод: 1 2 4 5
}