vector erase() і clear() у C++

Необхідна умова: Вектор на C++

Вектори — це те ж саме, що й динамічні масиви, з можливістю автоматичного зміни розміру, коли елемент вставляється або видаляється, а їх зберігання автоматично обробляється контейнером.

вектор::очистити()

The очистити() Функція використовується для видалення всіх елементів векторного контейнера, таким чином роблячи його розмір 0.

Синтаксис:

 vector_name .clear() 

Параметри: Жодні параметри не передаються.

Результат: Усі елементи вектора видаляються (або знищуються).

приклад:

 Input: myvector= {1, 2, 3, 4, 5}; myvector.clear(); Output: myvector= {} 

C++




// C++ program to demonstrate> // Implementation of clear() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >мій вектор;> > myvector.push_back(1);> > myvector.push_back(2);> > myvector.push_back(3);> > myvector.push_back(4);> > myvector.push_back(5);> > // Vector becomes 1, 2, 3, 4, 5> > myvector.clear();> > // vector becomes empty> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout < <> ' '> < < *it;> > return> 0;> }>

Вихід

 No Output 

Часова складність: O(N)
Допоміжний простір: О(1)
Всі елементи знищуються один за іншим.

Помилки та винятки

  1. Він не має жодної гарантії викиду.
  2. Він показує помилку, коли передається параметр.

вектор::стерти()

стерти() функція використовується для видалення елементів із контейнера з указаної позиції чи діапазону.

Синтаксис:

 vector_name . erase( position ) ; for deletion at specific position vector_name . erase( starting_position , ending_position ) ; // for deletion in range 

Параметри:

  • Позиція елемента, який потрібно видалити, у формі ітератора.
  • Діапазон визначається за допомогою початкового та кінцевого ітераторів.

Результат: Елементи видаляються із зазначеної позиції контейнера.

приклад:

 Input : myvector= {1, 2, 3, 4, 5}, iterator= myvector.begin()+2 myvector.erase(iterator); Output : 1, 2, 4, 5 Input : myvector= {1, 2, 3, 4, 5, 6, 7, 8}, iterator1= myvector.begin()+3, iterator2= myvector.begin()+6 myvector.erase(iterator1, iterator2); Output : 1, 2, 3, 7, 8 

Видалення ан елемент від a особлива позиція

приклад:

C++




// C++ program to demonstrate> // working of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >мійвектор{ 1, 2, 3, 4, 5 };> > vector <> int> >::ітератор it;> > it = myvector.begin();> > myvector.erase(it);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout < <> ' '> < < *it;> > return> 0;> }>

Вихід

 2 3 4 5 

Часова складність: O(N)
Допоміжний простір: О(1)

Видалення окремого елемента

Щоб видалити певний елемент на основі його значення, спочатку нам потрібно знати його позицію, і ми можемо знайти його за допомогою функції find().

приклад:

C++




// C++ program to remove element based on its value> #include> using> namespace> std;> int> main()> {> > vector <> int> >вектор = { 1, 2, 3, 3, 4, 5 };> > cout < <> 'vector before deleting '> < < endl;> > for> (> auto> element : vector) {> > cout < < element < <> ' '> ;> > }> > // finding the position of the element in the vector> > int> valueToBeDeleted = 3;> > auto> it = find(vector.begin(), vector.end(),> > valueToBeDeleted);> > if> (it != vector.end()) {> > vector.erase(it);> > }> > cout < < endl> > < <> 'Vector after deleting valueToBeDeleted '> > < < endl;> > for> (> auto> element : vector) {> > cout < < element < <> ' '> ;> > }> > cout < < endl;> > return> 0;> }>

Вихід

vector before deleting 1 2 3 3 4 5 Vector after deleting valueToBeDeleted 1 2 3 4 5 

Видалення елементів у діапазоні

C++




// C++ program to demonstrate> // Implementation of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >мійвектор{ 1, 2, 3, 4, 5 };> > vector <> int> >::ітератор it1, it2;> > it1 = myvector.begin();> > it2 = myvector.end();> > it2--;> > it2--;> > myvector.erase(it1, it2);> > // Printing the Vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout < <> ' '> < < *it;> > return> 0;> }>

Вихід

 4 5 

Часова складність: O(N)
Допоміжний простір: О(1)

Видалення елементів векторної пари

приклад:

C++




#include> using> namespace> std;> // Function to print vector pair elements> void> print(vectorint, string>>& річ) { cout < < '['; for (int i = 0; i cout < < '{' < < vec[i].first < < ',' < < vec[i].second < < '}'; if (i cout < < ', '; } cout < < ']' < < endl; } int main() { vectorint, string>> x = { { 1, 'яблуко' }, { 2, 'банан' }, { 3, 'вишня' }, { 4, 'Гава' } }; // Видалити елемент у позиції 1 (індекс 0) x.erase(x.begin()); print(x); // Вивести [{2,banana}, {3,cherry}, {4,Guava}] // Видалити елементи в позиціях 0 і 1 (індекси 0 // і 1) x.erase(x.begin(), x.begin() + 2); print(x); // Вивести [{4,Guava}] // Очистити вектор x.clear(); print(x); // Нічого не друкувати (лише порожні дужки) return 0; } // Цей код створено Susobhan Akhuli>

Вихід

[{2,banana}, {3,cherry}, {4,Guava}] [{4,Guava}] [] 

Часова складність: O(N)
Допоміжний простір: О(1)

Помилки та винятки

  1. Він не має гарантії виключення, якщо позиція дійсна.
  2. В іншому випадку показує невизначену поведінку.

застосування

Дано список цілих чисел, видалити всі парні елементи з вектора та надрукувати вектор.

введення:

1, 2, 3, 4, 5, 6, 7, 8, 9 

Вихід:

1 3 5 7 9 

Пояснення: 2, 4, 6 і 8, які парні та стерті з вектора

Алгоритм

  1. Виконайте цикл до розміру вектора.
  2. Перевірте, чи ділиться елемент у кожній позиції на 2, якщо так, видаліть елемент і зменште ітератор.
  3. Роздрукуйте кінцевий вектор.

Наведена нижче програма реалізує вищезазначений підхід.

C++




// C++ program to demonstrate> // Application of erase() function> #include> #include> using> namespace> std;> int> main()> {> > vector <> int> >мійвектор{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };>> > for> (> auto> i = myvector.begin(); i != myvector.end();> > ++i) {> > if> (*i % 2 == 0) {> > myvector.erase(i);> > i--;> > }> > }> > // Printing the vector> > for> (> auto> it = myvector.begin(); it != myvector.end();> > ++it)> > cout < <> ' '> < < *it;> > return> 0;> }>

Вихід

 1 3 5 7 9 

Часова складність: O(N) у гіршому випадку, оскільки стирання займає лінійний час.

clear() проти erase(), коли використовувати що?

очистити() видаляє всі елементи з векторного контейнера, таким чином роблячи його розмір 0. Усі елементи вектора видаляються за допомогою очистити() функція.

стерти() функція, з іншого боку, використовується для видалення певних елементів із контейнера або діапазону елементів із контейнера, таким чином зменшуючи його розмір на кількість видалених елементів.