Як очистити стек

Одним з типів структур даних, досить широко використовуваних сьогодні в прикладному програмуванні, є стек. Його особливістю є принцип організації елементів, при якому їх додавання і видалення можливо тільки по одному і тільки через «вершину», тобто за принципом LIFO. Але іноді буває необхідно очистити відразу весь стек.
Як очистити стек
Вам знадобиться
  • - текстовий редактор або IDE;
  • - транслятор з мови програмування.
Інструкція
1
Використовуйте методи об'єктів стека, спеціально призначені для його очищення. Вони присутні у більшості відповідних класів різних бібліотек і фреймворків. Наприклад, у класу Stack платформи .NET є метод Clear. Приклад його застосування на мові C # може виглядати так:
Stack oStack = new Stack () - // створення об'єкта стека
oStack.Push ("000") - // заповнення стека
oStack.Push ("111");
oStack.Clear () - // очистка стека
2
Методи зміни кількості елементів класів контейнерів, на яких часто будується функціонал класів стеків, також можна застосувати для очищення. Потрібно просто зменшити поточну кількість елементів до нуля. Так, шаблонний клас QStack бібліотеки Qt успадковується від шаблонного класу QVector, який має метод resize. Приклад його використання може бути таким:
QStack oStack- // декларація об'єкта стека
for (int i = 0- i < 10- i++) oStack.push(i)- // заполнение стека


oStack.resize (0) - // очистка стека
3
Очистку об'єкта стека зазвичай можна виконати через оператор присвоювання, який часто реалізований у відповідних класів. Для цього об'єкту очищаемого стека потрібно присвоїти тимчасовий об'єкт, створений конструктором за замовчуванням. Наприклад, шаблонний клас stack стандартної бібліотеки C ++, що є адаптером шаблонних класів контейнерів, не має методів довільного зміни кількості або видалення всіх елементів. Очистити його можна так:
std :: stack > OStack- // декларація об'єкта стека
for (int i = 0- i < 10- i++) oStack.push(i)- // заполнение стека
oStack = std :: stack > () - // Очистка стека
4
Очистіть об'єкт стека шляхом виклику конструктора копіювання за допомогою оператора new c аргументом-об'єктом, створеним конструктором за замовчуванням:
std :: stack > OStack- // декларація об'єкта стека
for (int i = 0- i < 10- i++) oStack.push(i)- // заполнение стека
new std :: stack > (OStack) - // очистка стека
5
Стек можна очистити шляхом послідовного вилучення всіх елементів за допомогою відповідних методів:
std :: stack > OStack- // декларація об'єкта стека
for (int i = 0- i < 10- i++) oStack.push(i)- // заполнение стека
while (! oStack.empty ()) oStack.pop () - // очистка стека
Однак даний підхід має тимчасову складність, лінійно залежну від кількості елементів в стеку. Тому його використання не раціонально.

Увага, тільки СЬОГОДНІ!