Массив используется для хранения нескольких данных, и количество элементов массива не может быть изменено во время выполнения. Эту проблему можно решить, используя вектор, который работает как динамический массив. В классе вектора существуют различные функции для добавления и удаления элемента из вектора. Функция erase () используется для удаления одного или нескольких элементов из вектора во время выполнения, что уменьшает размер вектора. Использование этой функции было объяснено в этом руководстве.
Синтаксис:
Ниже приведены два типа синтаксиса этой функции.
iterator erase (iterator position);
Вышеупомянутая функция erase () используется для удаления одного элемента из вектора, она возвращает итератор и указывает на элемент, за которым следует последний удаленный элемент.
iterator erase (iterator starting_position, iterator ending_position);
Вышеупомянутая функция erase () используется для удаления нескольких элементов из вектора на основе позиции, указанной в первом и втором аргументах этой функции.
Предварительные условия:
Прежде чем проверять примеры этого руководства, вы должны проверить, установлен ли компилятор g ++ в системе. Если вы используете Visual Studio Code, установите необходимые расширения для компиляции исходного кода C ++ и создания исполняемого кода. Здесь приложение Visual Studio Code было использовано для компиляции и выполнения кода C ++. Ниже показаны различные варианты использования функции erase () для вставки элемента (ов) в вектор.
Пример 1: удалить первый элемент element
Создайте файл C ++ со следующим кодом, чтобы удалить элемент из начала вектора. В коде использован вектор строковых значений. Значения вектора были напечатаны до и после удаления первого элемента из вектора с помощью функции erase () с одним параметром.
//Include necessary libraries
#include <iostream>
#include <vector>
using namespace std;
//Display the values of the vector
void display_vector(vector<string> fruits)
{
//Initialize the counter
int counter = 1;
//Iterate and print the elements of the vector using loop
for (auto ele = fruits.begin(); ele != fruits.end(); ele++)
{
//Check the elements is the last element or not
if(counter != fruits.size())
cout << *ele << «, «;
else
cout << *ele;
//Increment the counter by 1
counter++;
}
cout << endl;
}
int main(void) {
//Declare a vector of string data
vector<string> fruits = { «Orange», «Banana», «Mango», «Jack Fruit», «Lichi» };
//Print the existing values of the vector
cout << «The values of the vector before remove: « << endl;
display_vector(fruits);
//Remove the first element from the vector
fruits.erase(fruits.begin());
//Print the existing values of the vector after remove
cout << «\nThe values of the vector after remove: « << endl;
display_vector(fruits);
return 0;
}
Выход:
Следующий вывод появится после выполнения вышеуказанного кода.
Пример 2: Удалить несколько элементов
Создайте файл C ++ со следующим кодом, чтобы удалить несколько элементов из вектора с помощью функции erase (). В коде использован вектор целочисленных значений. Здесь используются два итератора для установки диапазона элементов, удаленных из вектора. Функция erase () использовалась с двумя параметрами для удаления нескольких элементов из вектора.
//Include necessary libraries
#include <vector>
#include <iostream>
using namespace std;
//Display the vector
void display_vector(vector<int> nums)
{
//Print the values of the vector using loop
for(auto ele = nums.begin(); ele != nums.end() ; ele++)
cout << *ele << » «;
//Add new line
cout << «\n«;
}
int main() {
//Declare a vector of integer data
vector <int> intArray { 678, 435, 960, 231, 800, 387, 634, 267, 409, 294};
//Print the existing values of the vector
cout << «The values of the vector before remove: « << endl;
display_vector(intArray);
//Declare two iterators to remove the range of elements from the vector
vector<int> :: iterator startEle, endEle;
//Set the iterator to the first position
startEle = intArray.begin();
//Increment the starting iterator by 2
advance(startEle, 2);
//Set the iterator to the last position
endEle = intArray.end();
//Decrement the ending iterator by 3
advance(endEle, —3);
//Remove the range of elements
intArray.erase(startEle, endEle);
//Print the existing values of the vector after remove
cout << «\nThe values of the vector after remove: « << endl;
display_vector(intArray);
return 0;
}
Выход:
Следующий вывод появится после выполнения вышеуказанного кода. В соответствии с диапазоном итераторов удалены элементы с 3-й по 7-ю позицию вектора.
Пример 3: Удалить определенные элементы
Создайте файл C ++ со следующим кодом, чтобы удалить определенные элементы вектора с помощью функции erase (). В коде объявлен вектор из 7 целочисленных элементов. Затем цикл for использовался для перебора элементов вектора и удаления из вектора тех элементов, которые не делятся на 5.
//Include necessary libraries
#include <iostream>
#include <vector>
using namespace std;
int main()
{
//Declare a vector of integer data
vector<int> numbers = { 78, 45, 67, 25, 98, 75, 52 };
cout << «The values of the vector before remove:\n«;
for (int const &i: numbers) {
cout << i << ‘ ‘;
}
cout << endl;
//Remove the numbers from the vector those are not divisible by 5
for (auto ele = numbers.begin(); ele != numbers.end(); ele++)
{
//Check the number is divisible by 5 or not
if (*ele % 5 != 0)
{
//Remove the element based on the iterator
numbers.erase(ele—);
}
}
cout << «The values of the vector after remove:\n«;
for (int const &i: numbers) {
cout << i << ‘ ‘;
}
cout << endl;
return 0;
}
Выход:
Следующий вывод появится после выполнения вышеуказанного кода. Выходные данные показывают, что вектор содержит только элементы, кратные 5, а другие элементы были удалены.
Заключение
В этом уроке были показаны различные варианты использования функции erase () для удаления векторных элементов. В C ++ есть много других функций для удаления элемента из вектора, и эти функции могут удалять по одному элементу за раз. Но как одиночные, так и множественные элементы из любой позиции вектора могут быть удалены с помощью функции vector erase ().