Std :: list в C ++ з прикладом

Зміст:

Anonim

Що таке std :: list?

У C ++ std :: list посилається на контейнер зберігання. Список std: дозволяє вставляти та видаляти елементи з будь-якого місця. Std :: list реалізований як подвійно пов'язаний список. Це означає, що дані списку можуть бути доступні у двонаправленому та послідовному режимах.

Список стандартних бібліотек шаблонів не підтримує швидкий довільний доступ, але він підтримує послідовний доступ з усіх напрямків.

Ви можете розкидати елементи списку в різних фрагментах пам'яті. Інформація, необхідна для послідовного доступу до даних, зберігається в контейнері. Список std :: може розширюватися та стискатися з обох кінців, якщо це необхідно під час роботи. Внутрішній розподільник автоматично відповідає вимогам щодо зберігання.

У цьому підручнику з C ++ ви дізнаєтесь:

  • Що таке std :: list?
  • Навіщо використовувати std :: list?
  • Синтаксис списку
  • Функції списку С ++
  • Конструктори
  • Властивості контейнера
  • Вставка в список
  • Видалення зі списку

Навіщо використовувати std :: list?

Ось причини використання std :: List:

  • Список std :: краще порівнює з іншими контейнерами послідовностей, такими як масив та вектор.
  • Вони мають кращі показники при вставці, переміщенні та витягуванні елементів з будь-якого положення.
  • Std :: list також краще працює з алгоритмами, які інтенсивно виконують такі операції.

Синтаксис списку

Щоб визначити std :: list, нам потрібно імпортувати файл заголовка . Ось синтаксис визначення std :: list:

template < class Type, class Alloc =allocator > class list;

Ось опис вищезазначених параметрів:

  • T - визначає тип вміщуваного елемента.

    Ви можете замінити T будь-яким типом даних, навіть типом, визначеним користувачем.

  • Alloc - визначає тип об'єкта розподілу.

    Тут використовується шаблон класу розподілювача за замовчуванням. Це залежить від вартості та використовує просту модель розподілу пам’яті.

Приклади 1:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка алгоритму, щоб використовувати його функції.
  2. Включіть файл заголовка iostream, щоб використовувати його функції.
  3. Включіть файл заголовка списку, щоб використовувати його функції.
  4. Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
  5. Створіть список із назвою my_list із набором з 4 цілих чисел.
  6. Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
  7. Роздрукуйте значення списку на консолі.
  8. Кінець корпусу петлі.
  9. Кінець тіла основної () функції.

Функції списку С ++

Ось загальні функції std :: list:

Функція Опис
вставити () Ця функція вставляє новий елемент перед позицією, яку вказує ітератор.
відсунути() Ці функції додають новий пункт в кінці списку.
push_front () Він додає новий пункт на початку списку.
pop_front () Він видаляє перший пункт списку.
розмір () Ця функція визначає кількість елементів списку.
спереду () Визначає перші елементи списку.
назад () Визначає останній пункт списку.
зворотний() Це змінює елементи списку.
злиття () Він об’єднує два відсортовані списки.

Конструктори

Ось список функцій, наданих файлом заголовка :

  • Конструктор за замовчуванням std :: list :: list () - Він створює порожній список, що з нульовими елементами.
  • Конструктор заповнення std :: list :: list () - Він створює список з n елементами і присвоює кожному елементу значення нуль (0).
  • Конструктор діапазонів std :: list :: list () - створює список з безліччю елементів у діапазоні від першого до останнього.
  • Копіювати конструктор std :: list :: list () - Він створює список з копією кожного елемента, що міститься в існуючому списку.
  • Конструктор переміщення std :: list :: list () - створює список з елементами іншого списку за допомогою семантики переміщення.
  • Конструктор списку ініціалізаторів std :: list :: list () - Він створює список з елементами іншого списку за допомогою семантики переміщення.

Приклад 2:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка iostream, щоб використовувати його функції.
  2. Включіть файл заголовка списку, щоб використовувати його функції.
  3. Включіть простір імен std в код, щоб використовувати його класи, не викликаючи його.
  4. Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
  5. Створіть порожній список з іменем l.
  6. Створіть список з назвою l1 із набором із 3 цілих чисел.
  7. Створіть список з іменем l2 з усіма елементами в списку з іменем l1, від початку до кінця.
  8. Створіть список з назвою l3, використовуючи семантику переміщення. Список l3 матиме той самий вміст, що і список l2.
  9. Надрукуйте розмір списку з назвою l на консолі поряд з іншим текстом.
  10. Роздрукуйте текст на консолі.
  11. Створіть ітератор з іменем і використовуйте його для перебору елементів списку з іменем l2.
  12. Надрукуйте елементи списку з назвою l2 на консолі.
  13. Роздрукуйте текст на консолі.
  14. Створіть ітератор з іменем і використовуйте його для перебору елементів списку з іменем l3.
  15. Надрукуйте елементи списку з назвою l3 на консолі.
  16. Після успішного завершення програма повинна повертати значення.
  17. Кінець тіла основної () функції.

Властивості контейнера

Ось список властивостей контейнера:

Власність Опис
Послідовність Контейнери послідовності впорядковують свої елементи в суворій лінійній послідовності. Доступ до елементів здійснюється за їх розташуванням у послідовності.
Подвійно пов’язаний список Кожен елемент має інформацію про те, як знайти попередні та наступні елементи. Це забезпечує постійний час для операцій вставки та видалення.
Розміщувач даних Об'єкт розподілювача використовується для динамічного зміни розміру сховища.

Вставка в список

Існують різні функції, які ми можемо використовувати для вставки значень у список. Давайте продемонструємо це:

Приклад 3:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка алгоритму, щоб використовувати його функції.
  2. Включіть файл заголовка iostream, щоб використовувати його функції.
  3. Включіть файл заголовка списку, щоб використовувати його функції.
  4. Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
  5. Створіть список із назвою my_list із набором з 4 цілих чисел.
  6. Вставте елемент 11 у передню частину списку з іменем my_list.
  7. Вставте елемент 18 у кінець списку з назвою my_list.
  8. Створіть його ітератор і за допомогою нього знайдіть елемент 10 зі списку my_list.
  9. За допомогою оператора if визначте, чи був виявлений вищевказаний елемент чи ні.
  10. Вставте елемент 21 перед вищезазначеним елементом, якщо він був знайдений.
  11. Кінець тіла оператора if.
  12. Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
  13. Роздрукуйте значення списку на консолі.
  14. Кінець корпусу петлі.
  15. Кінець тіла основної () функції.

Видалення зі списку

Можливо видалити елементи зі списку. Функція стирання () дозволяє видалити елемент або діапазон елементів зі списку.

  • Щоб видалити один елемент, ви просто передаєте одне ціле положення. Елемент буде видалено.
  • Щоб видалити діапазон, ви передаєте початковий та кінцевий ітератори. Давайте це продемонструємо.

Приклад 4:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}

Вихід:

Ось скріншот коду:

Пояснення коду:

  1. Включіть файл заголовка алгоритму, щоб використовувати його функції.
  2. Включіть файл заголовка iostream, щоб використовувати його функції.
  3. Включіть файл заголовка списку, щоб використовувати його функції.
  4. Включіть простір імен std у нашу програму, щоб використовувати його класи, не викликаючи його.
  5. Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
  6. Створіть список із назвою my_list із набором з 4 цілих чисел.
  7. Роздрукуйте текст на консолі.
  8. Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
  9. Роздрукуйте значення списку на консолі.
  10. Кінець тіла циклу for.
  11. Створіть ітератор i, який вказує на перший елемент списку.
  12. Використовуйте функцію erase (), на яку вказує ітератор i.
  13. Роздрукуйте текст на консолі.
  14. Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
  15. Роздрукуйте значення списку на консолі. Це відбувається після видалення.
  16. Кінець тіла циклу for.
  17. Після успішного завершення програма повинна повернути значення.
  18. Кінець тіла основної () функції.

Короткий зміст:

  • Std :: list - це контейнер для зберігання.
  • Це дозволяє вставляти та видаляти елементи з будь-якого місця в постійний час.
  • Він реалізований як подвійне посилання
  • До даних std :: list можна отримати двосторонній та послідовний доступ.
  • std :: list не підтримує швидкий довільний доступ. Однак він підтримує послідовний доступ з усіх напрямків.
  • Ви можете розкидати елементи списку std :: list у різних фрагментах пам'яті.
  • Ви можете зменшити або розширити std :: list з обох кінців, якщо це необхідно під час роботи.
  • Щоб вставити елементи в std :: list, ми використовуємо функцію insert ().
  • Для видалення елементів зі списку std :: ми використовуємо функцію erase ().