lists stl
Познайомтесь із усіма списками STL разом із їх впровадженням.
Списки - це послідовні контейнери. Списки містять елементи в несуміжних місцях. Ми обговорювали масиви та вектори в наших попередніх підручниках.
У разі контейнерів масиву та вектора, оскільки ці контейнери зберігають дані у суміжній пам'яті, операція вставки в середині цих контейнерів виявляється дуже затратною, оскільки нам доводиться відповідно зміщувати існуючі елементи, щоб звільнити місце для нового елемента.
=> Дивіться тут, щоб ознайомитися з повним списком підручників з C ++.
що таке ключ безпеки для маршрутизатора - -
Що ви дізнаєтесь:
Огляд
Список є контейнером, який долає цей недолік масивів та векторних контейнерів. Це дозволяє нам вставляти елементи в будь-яке місце списку, не завдаючи великих накладних витрат. Але списки повільніші за вектори, що стосується обходу.
У цьому підручнику ми побачимо реалізацію списків у STL разом з різними операціями обходу, маніпуляцій та доступу до списку з прикладами.
Зауважте, що більшість операцій зі списками подібні до операцій з векторами, а отже, читачі, які вже прочитали наш підручник з векторів, не матимуть проблем з інтерпретацією концепцій списків.
Декларація та ініціалізація
Для реалізації контейнера списку та використання всіх його переваг нам потрібно включити в нашу програму файл заголовка.
#include Загальною декларацією для контейнера списку є
std::list listName; Наприклад,ми можемо оголосити список із назвою «mylist» типу int таким чином:
std::list mylist; Ми також можемо ініціалізувати список під час оголошення або додати елементи до нього, використовуючи одну з підтримуваних операцій.
Давайте подивимося, як ми можемо ініціалізувати список, який ми створили вище.
std::list mylist = {1, 1, 2, 3, 5}; Вищевказана ініціалізація буде закладена в пам’ять, як показано нижче:

Після ініціалізації списку ми можемо отримати доступ до елементів списку за допомогою ітератора. Функції ітератора «почати» та «закінчити» допомагають нам пройтись по елементах списку.
Примітка: Ітератор списку також підтримує інші ітератори, такі як зворотні ітератори (rbegin, rend), постійні ітератори (cbegin, cend) та постійні зворотні ітератори (crbegin, crend) і можуть використовуватися подібним чином, як вектори.
Наступний приклад це показує.
#include #include #include #include using namespace std; int main() { list mylist = {1, 1, 2, 3, 5}; cout<<”List elements are: “; list::iterator it; for(it=mylist.begin();it!=mylist.end();++it) cout<<*it<<” “; }Вихід:
Елементи списку: 1 1 2 3 5
Таким чином, у наведеному вище прикладі ми оголосили список послідовності Фібоначчі. Далі ми оголошуємо ітератор того ж типу, що і list, а потім, використовуючи цикл for, друкуємо вміст списку від початку до кінця.
Тепер перейдемо до операцій або функцій, які нам надає контейнер зі списком у STL.
Список операцій
- Вставити: Використовується для вставки елемента в заданому положенні. Повертає ітератор, що вказує на перший вставлений елемент.
вставка (pos, num_elem, elem)
Де,
pos => Позиція, в яку слід вставити нові елементи.
num_elem => Кількість елементів, які потрібно вставити; за замовчуванням 1.
елемент => Фактичне значення, яке потрібно вставити.
Давайте зрозуміємо функцію вставки, взявши Приклад.
#include #include // for list operations using namespace std; int main() { list mylist = {1,1,2}; list::iterator it = mylist.begin(); // iterator to point to 4th position advance(it,` 3); // inserts 3 at 4th position mylist.insert(it, 3); cout << 'The list after inserting' << ' 1 element using insert() is : '; for (list::iterator i = mylist.begin();i != mylist.end();i++) cout << *i << ' '; cout << endl; }Вихід:
Список після вставки 1 елемента за допомогою insert () є: 1 1 2 3
Це приклад вставки лише одного елемента в 4гопозиція у списку, яка врешті-решт є останньою. Отже, по-перше, у нас є список, для якого ми визначили ітератор, що вказує на початок списку. Потім ми переміщуємо цей ітератор на 4гопозицію, а потім викликати вставку, щоб вставити 1 елемент.
Ми також можемо вставити більше одного елемента, вказавши другий параметр у функції вставки. Якщо він не вказаний, за замовчуванням він дорівнює 1.
- відсунути :Додає новий елемент у кінці списку.
- push_front :Додає новий елемент на початку списку.
Давайте побачимо приклад, який демонструє використання функцій push_back і push_front.
#include #include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3}; cout<<'List elements are: '; printlist(mylist); mylist.push_front(0); mylist.push_back(5); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }Вихід:
Елементами списку є: 1 1 2 3
Вміст списку після push_front і push_back: 0 1 1 2 3 5
У цьому прикладі ми спочатку створюємо і перераховуємо до нього всі два елементи, по одному спереду та ззаду, використовуючи функції push_front і push_back відповідно. Результат показує змінений список після виконання обох функцій.
- pop_back :Видаляє останній елемент у списку, зменшуючи тим самим розмір списку на 1.
- pop_front :Видаляє перший елемент у списку, зменшуючи тим самим розмір списку на 1.
У наступному прикладі показано використання операцій pop_back та pop_front у списку.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); mylist.pop_front(); mylist.pop_back(); cout<<'
List contents after push_front and push_back: '; printlist(mylist); }Вихід:
Елементи списку: 1 1 2 3 5
Вміст списку після push_front і push_back: 1 2 3
Як описано у визначенні операцій, кожна з операцій pop_front та pop_back видаляє елемент спереду та ззаду списку, тобто перший та останній елементи списку відповідно, і, отже, кожен раз зменшує розмір списку на 1.
- розмір :Повертає розмір списку, тобто кількість елементів у списку.
- порожній :Перевіряє, чи список порожній.
- стерти :Видаляє зі списку елемент або діапазон елементів.
- ясно :Видаляє всі елементи зі списку, роблячи його розміром 0.
Нижче наведено приклад, щоб продемонструвати використання всіх вищезазначених функцій, тобто розмір, порожній, стертий та очищений.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'size of the list: '< Вихід:
Елементи списку: 1 1 2 3 5
розмір списку: 5
Список після стирання першого елемента: 1 2 3 5
Новий розмір списку: 4
розмір списку після очищення: 0
Вищевказана програма демонструє всі чотири функції, пов'язані з місткістю списку. Ми бачимо, що розмір списку зменшується на 1, коли ми стираємо 1 елемент списку. Коли ми називаємо чітку операцію зі списку, розмір дорівнює 0, що означає, що всі елементи зі списку видаляються.
- спереду :Повертає значення першого елемента списку.
- назад :Повертає значення останнього елемента списку.
- поміняти місцями :Міняє вміст одного списку вмістом іншого списку однакового розміру та типу.
- зворотний :Алгоритм, який змінює список.
- сортувати :Сортує поданий список.
Наведений нижче приклад демонструє використання функцій переднього, заднього, зворотного, сортування та обміну.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 2, 3, 5}; cout<<'List elements are: '; printlist(mylist); cout<<'
Front of the list: '< Вихід:
Елементи списку: 1 1 2 3 5
Передня частина списку: 1
Назад списку: 5
Перевернутий список: 5 3 2 1 1
Зміст непарного списку: 1 3 5 7 9
Після обміну
мій список: 1 3 5 7 9
Оддліст: 5 3 2 1 1
У цьому коді, по-перше, ми друкуємо переднє і заднє значення списку mylist. Потім цей список перевертається і роздруковується зворотний список. Після цього ми визначаємо ще один список непарних чисел, який не в будь-якому порядку, і ми викликаємо алгоритм «Сортування» для сортування цього списку. Потім ми міняємо місцями два списки за допомогою функції обміну і друкуємо обмінені списки.
- зрощення :Ця функція використовується для перенесення вмісту одного списку до іншого списку на певній позиції.
Обидва списки повинні бути одного типу.
зрощення (позиція, список);
де,
position => Позиція, на яку слід передати вміст списку.
list => Список, елементи якого мають бути передані.
У наведеному нижче прикладі показано використання функції зрощення.
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1, 8,13}; cout<<'List elements are: '; printlist(mylist); list seclist = {2,3,5}; cout<<'list to be spliced: '; printlist(seclist); list:: iterator it = mylist.begin(); it ++; it++; mylist.splice(it,seclist); cout<<'
List contents after splicing at position 2: '; printlist(mylist); } Вихід:
Елементи списку: 1 1 8 13
список для зрощування: 2 3 5
Вміст списку після зрощування в положенні 2: 1 1 2 3 5 8 13
приклад показує, що ми використовуємо два списки. Спочатку ітератор для mylist переміщується у дві позиції, а потім викликається функція сплайсингу, щоб перенести вміст другого списку на третю позицію першого списку.
- піти :На відміну від функції зрощування, яка може використовуватися для передачі вмісту одного списку в інший у певній позиції, операція злиття безпосередньо об’єднує два списки, щоб сформувати один єдиний список. Для злиття обидва списки повинні бути відсортовані.
Нижче наведено приклад для демонстрації функції злиття.
mp3 безкоштовно завантажити для телефонів Android
#include #include #include using namespace std; void printlist(list mylist) { list :: iterator it; for(it = mylist.begin(); it != mylist.end(); ++it) cout <<*it<<' '; cout << '
'; } int main() { std::list mylist = {1, 1,2,3,5,8}; list seclist = {4,6,7}; cout<<'First List: '; printlist(mylist); cout< Вихід:
Перший список: 11 2 3 5 8
Другий список: 4 6 7
Вміст списку після об’єднання двох списків:
1 1 2 3 4 5 6 7 8
Таким чином, у наведеній вище програмі ми маємо два переліковані списки. Ми називаємо операцію злиття цих двох списків. Отриманий список - це відсортований список, що містить елементи обох списків.
Висновок
Ми закінчили цей підручник зі списків у STL. Ми сподіваємось, що цей посібник дасть вам величезні знання про Списки в STL.
=> Перегляньте тут, щоб побачити A-Z з навчальних посібників з C ++ тут.
Рекомендована література