Найти в Дзене
Dull

Как работает vector erase в С++

В C++ метод erase в контейнере std::vector используется для удаления элементов из вектора. Этот метод может принимать либо итератор, указывающий на элемент, который нужно удалить, либо диапазон итераторов, указывающий на группу элементов, которые нужно удалить. Вот основные моменты, которые стоит знать о vector::erase: #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; vec.erase(vec.begin() + 2); // Удаляет элемент со значением 3 for (int num : vec) { std::cout << num << " "; // Вывод: 1 2 4 5 } return 0; } Удаление диапазона элементов:
Если вы хотите удалить несколько элементов подряд, вы можете передать итераторы, указывающие на начало и конец диапазона. Например: #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; vec.erase(vec.begin() + 1, vec.begin() + 4); // Удаляет элементы 2, 3 и 4 for (int num : vec) { std::cout << num << " "; // Вывод: 1 5 } return 0; } Вот пример, который демонстрирует некоторые и

В C++ метод erase в контейнере std::vector используется для удаления элементов из вектора. Этот метод может принимать либо итератор, указывающий на элемент, который нужно удалить, либо диапазон итераторов, указывающий на группу элементов, которые нужно удалить.

Вот основные моменты, которые стоит знать о vector::erase:

  1. Удаление одного элемента:
    Если вы хотите удалить один элемент, вы можете передать итератор на этот элемент. Например:

#include <iostream>

#include <vector>

int main() {

std::vector<int> vec = {1, 2, 3, 4, 5};

vec.erase(vec.begin() + 2); // Удаляет элемент со значением 3

for (int num : vec) {

std::cout << num << " "; // Вывод: 1 2 4 5

}

return 0;

}

Удаление диапазона элементов:
Если вы хотите удалить несколько элементов подряд, вы можете передать итераторы, указывающие на начало и конец диапазона. Например:

#include <iostream>

#include <vector>

int main() {

std::vector<int> vec = {1, 2, 3, 4, 5};

vec.erase(vec.begin() + 1, vec.begin() + 4); // Удаляет элементы 2, 3 и 4

for (int num : vec) {

std::cout << num << " "; // Вывод: 1 5

}

return 0;

}

  1. Возврат значения:
    Метод erase возвращает итератор на элемент, следующий за удалённым элементом (или end(), если удалён последний элемент).
  2. Перемещение элементов:
    После удаления элемента, элементы, находящиеся после удалённого, сдвигаются влево, чтобы заполнить образовавшуюся пустоту. Это может быть неэффективно для больших векторов, так как требует перемещения элементов.
  3. Изменение размера:
    После вызова erase размер вектора уменьшается на количество удалённых элементов.
  4. Итераторы:
    Обратите внимание, что итераторы, указывающие на элементы вектора, становятся недействительными после вызова erase, если они указывают на удаляемые элементы или на элементы, находящиеся после них.

Вот пример, который демонстрирует некоторые из этих аспектов:

#include <iostream>

#include <vector>

int main() {

std::vector<int> vec = {10, 20, 30, 40, 50};

// Удаляем один элемент

vec.erase(vec.begin() + 1); // Удаляет 20

// Удаляем диапазон

vec.erase(vec.begin(), vec.begin() + 2); // Удаляет 10 и 30

// Выводим оставшиеся элементы

for (int num : vec) {

std::cout << num << " "; // Вывод: 40 50

}

return 0;

}

-2

Заключение

Таким образом, vector::erase — это мощный инструмент для управления содержимым вектора, но следует помнить о последствиях удаления элементов, таких как изменение размера вектора и недействительность итераторов.