and :: clear () и about :: erase () в 100 ++ STL

Опубликовано: 31 Декабря, 2021


Очереди Deque или Double-end - это контейнеры последовательности с функцией расширения и сжатия на обоих концах. Они похожи на векторы, но более эффективны в случае вставки и удаления элементов в конце, а также в начале. В отличие от векторов, непрерывное выделение памяти не может быть гарантировано.

deque :: clear ()

Функция clear () используется для удаления всех элементов контейнера двухсторонней очереди, в результате чего его размер равен 0.
Синтаксис:

dequename .clear ()
Параметры:
Параметры не передаются.
Результат :
Все элементы двухсторонней очереди
удалено (или уничтожено)

Примеры:

Ввод: mydeque = {1, 2, 3, 4, 5}
         mydeque.clear ();
Вывод: mydeque = {}

Ввод: mydeque = {}
         mydeque.clear ();
Вывод: mydeque = {}

Ошибки и исключения

1. У него нет гарантии выброса исключения.
2. Показывает ошибку при передаче параметра.

Выход:

Нет выхода
deque :: erase ()

Функция erase () используется для удаления элементов из контейнера из указанной позиции или диапазона.

Синтаксис:

1. dequename .erase ( позиция )
2. dequename .erase ( начальная позиция, конечная позиция )
Параметры:
Позиция удаляемого элемента в виде итератора.
или диапазон, указанный с помощью начального и конечного итераторов.
Результат :
Элементы удаляются из указанного
положение контейнера.

Примеры:

Вход: mydeque {1, 2, 3, 4, 5}, итератор = 2
         mydeque.erase (итератор);
Выход: 1, 2, 4, 5

Вход: mydeque {1, 2, 3, 4, 5, 6, 7, 8}, iterator1 = 3, iterator2 = 6
         mydeque.erase (итератор1, итератор2);
Выход: 1, 2, 3, 8

Ошибки и исключения

1. У него нет гарантии выброса исключения, если позиция действительна.
2. В противном случае показывает неопределенное поведение.

Удаление элемента из определенного положения

// CPP program to illustrate
// Implementation of erase() function
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque< int > mydeque{ 1, 2, 3, 4, 5 };
deque< int >::iterator it;
it = mydeque.begin();
mydeque.erase(it);
// Printing the deque
for ( auto it = mydeque.begin(); it != mydeque.end(); ++it)
cout << ' ' << *it;
return 0;
}

Выход:

2 3 4 5

Удаление элементов в диапазоне

// CPP program to illustrate
// Implementation of erase() function
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque< int > mydeque{ 1, 2, 3, 4, 5 };
deque< int >::iterator it1, it2;
it1 = mydeque.begin();
it2 = mydeque.end();
it2--;
it2--;
mydeque.erase(it1, it2);
// Printing the deque
for ( auto it = mydeque.begin(); it != mydeque.end(); ++it)
cout << ' ' << *it;
return 0;
}

Выход:

4 5

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

Ввод: 1, 2, 3, 4, 5, 6, 7, 8, 9
Выход: 1 3 5 7 9
Пояснение - 2, 4, 6 и 8, которые даже удалены из двухсторонней очереди

Алгоритм
1. Выполните цикл до размера двухсторонней очереди.
2. Проверьте, делится ли элемент в каждой позиции на 2, если да, удалите элемент и увеличьте итератор, иначе просто увеличьте итератор, чтобы проверить следующий элемент.
3. Распечатайте последнюю двухстороннюю очередь.

// CPP program to illustrate
// Application of erase() function
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque< int > mydeque{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
deque< int >::iterator i;
i = mydeque.begin();
while (i != mydeque.end()) {
if (*i % 2 == 0)
mydeque.erase(i);
i++;
}
// Printing the deque
for ( auto it = mydeque.begin(); it != mydeque.end(); ++it)
cout << ' ' << *it;
return 0;
}

Выход:

1 3 5 7 9
clear () VS erase (). Когда что использовать?

clear () удаляет все элементы из контейнера двухсторонней очереди, таким образом делая его размер 0. Все элементы двухсторонней очереди удаляются с помощью функции clear ().
С другой стороны, функция erase () используется для удаления определенных элементов из контейнера или ряда элементов из контейнера, уменьшая таким образом его размер на количество удаленных элементов.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .