and :: clear () и about :: erase () в 100 ++ STL
Очереди Deque или Double-end - это контейнеры последовательности с функцией расширения и сжатия на обоих концах. Они похожи на векторы, но более эффективны в случае вставки и удаления элементов в конце, а также в начале. В отличие от векторов, непрерывное выделение памяти не может быть гарантировано.
Функция clear () используется для удаления всех элементов контейнера двухсторонней очереди, в результате чего его размер равен 0.
Синтаксис:
dequename .clear () Параметры: Параметры не передаются. Результат : Все элементы двухсторонней очереди удалено (или уничтожено)
Примеры:
Ввод: mydeque = {1, 2, 3, 4, 5} mydeque.clear (); Вывод: mydeque = {} Ввод: mydeque = {} mydeque.clear (); Вывод: mydeque = {}
Ошибки и исключения
1. У него нет гарантии выброса исключения.
2. Показывает ошибку при передаче параметра.
Выход:
Нет выхода
Функция 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 () удаляет все элементы из контейнера двухсторонней очереди, таким образом делая его размер 0. Все элементы двухсторонней очереди удаляются с помощью функции clear ().
С другой стороны, функция erase () используется для удаления определенных элементов из контейнера или ряда элементов из контейнера, уменьшая таким образом его размер на количество удаленных элементов.