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

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

Одним з типів структур даних, досить широко використовуваних сьогодні в прикладному програмуванні, є стек. Його особливістю є принцип організації елементів, при якому їх додавання і видалення можливе тільки по одному і тільки через "вершину", тобто за принципом 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 < int > oStack ;//декларація об "єкта стекаfor (int i = 0; i < 10; i++) oStack.push (i) ;//заповнення стекаoStack.resize (0) ;//очищення стека

3. Очищення об 'єкта стека зазвичай можна виконати через оператор присвоювання, який часто реалізований у відповідних класів. Для цього об 'єкту очищуваного стека потрібно присвоїти тимчасовий об' єкт, створений конструктором за замовчуванням. Наприклад, шаблонний клас stack стандартної бібліотеки C++, який є адаптером шаблонних класів контейнерів, не має методів довільної зміни кількості або видалення всіх елементів. Очистити його можна так:std::stack<int, std::list < int > > oStack ;//декларація об "єкта стекаfor (int i = 0; i < 10; i++) oStack.push (i) ;//заповнення стекаoStack = std::stack<int, std::list < int > > () ;//очищення стека

4. Очистіть об 'єкт стека шляхом виклику конструктора копіювання за допомогою оператора new c аргументом-об' єктом, створеним конструктором за замовчуванням:std::stack<int, std::list < int > > oStack ;//декларація об "єкта стекаfor (int i = 0; i < 10; i++) oStack.push (i) ;//заповнення стекаnew std::stack<int, std::list < int > > (oStack) ;//очищення стека

5. Стек можна очистити шляхом послідовного вилучення всіх елементів за допомогою відповідних методів:std::stack<int, std::list < int > > oStack ;//декларація об "єкта стекаfor (int i = 0; i < 10; i++) oStack.push (i) ;//заповнення стекаwhile (! oStack.empty ()) oStack.pop () ;//очищення стекаОднак цей підхід має тимчасову складність, лінійно залежну від кількості елементів у стеку. Тому його використання не раціональне.