vector::erase
| | | | | | | | | | | | | | | | | | | | vector::erase | | |
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
Удаляет элементы из вектора.
Уменьшает размер вектора. Вызывает деструктор у каждого удаляемого объекта.
У функции есть две версии:
iterator erase ( iterator position );
Удаляет один элемент, на который указывает итератор position .
iterator erase ( iterator first, iterator last );
Удаляет последовательность [first; last) .
Замечание 1. Если в векторе хранятся указатели, то их надо уничтожить самостоятельно. В противном случае будет утечка памяти. Функция
erase не вызывает оператор delete или delete []!
Замечание 2. Все итераторы и ссылки на элементы после позиции first или position становятся недействительными.
Параметры
- position
- Итератор на элемент вектора, который будет удален.
- first
- Итератор на первый элемент последовательности, которая будет удалена.
- last
- Итератор на следующий за последним элемент последовательности, которая будет удалена.
Возвращаемое значение
Итератор, указывающий на элемент, следующий за удаленным. Если был удален последний элемент, то
возвращается vector::end
Пример.
#include <iostream> #include <algorithm>
#include <vector>
using namespace std;
void PrintElement(int elem)
{
cout << elem << " ";
}
int main ()
{
vector<int> theVector;
for (int i = 0; i < 20; i++)
{
theVector.push_back(i);
}
cout << "theVector elements:\n";
for_each(theVector.begin(), theVector.end(), PrintElement);
cout << endl;
vector<int>::iterator iter = find(theVector.begin(), theVector.end(), 13);
theVector.erase(iter);
theVector.erase(theVector.begin(), theVector.begin() + 5);
cout << "After erases:\n";
for_each(theVector.begin(), theVector.end(), PrintElement);
cout << endl;
return 0;
}
Результат:
theVector elements:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
After erases:
5 6 7 8 9 10 11 12 14 15 16 17 18 19
Временная сложность
O(n + m), где n - число удаляемы элементов, а m - число элементов вектора, которые находятся после последнего удаленного.
Версия для печати
|