Що таке 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';}}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка алгоритму, щоб використовувати його функції.
- Включіть файл заголовка iostream, щоб використовувати його функції.
- Включіть файл заголовка списку, щоб використовувати його функції.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
- Створіть список із назвою my_list із набором з 4 цілих чисел.
- Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
- Роздрукуйте значення списку на консолі.
- Кінець корпусу петлі.
- Кінець тіла основної () функції.
Функції списку С ++
Ось загальні функції 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;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream, щоб використовувати його функції.
- Включіть файл заголовка списку, щоб використовувати його функції.
- Включіть простір імен std в код, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
- Створіть порожній список з іменем l.
- Створіть список з назвою l1 із набором із 3 цілих чисел.
- Створіть список з іменем l2 з усіма елементами в списку з іменем l1, від початку до кінця.
- Створіть список з назвою l3, використовуючи семантику переміщення. Список l3 матиме той самий вміст, що і список l2.
- Надрукуйте розмір списку з назвою l на консолі поряд з іншим текстом.
- Роздрукуйте текст на консолі.
- Створіть ітератор з іменем і використовуйте його для перебору елементів списку з іменем l2.
- Надрукуйте елементи списку з назвою l2 на консолі.
- Роздрукуйте текст на консолі.
- Створіть ітератор з іменем і використовуйте його для перебору елементів списку з іменем l3.
- Надрукуйте елементи списку з назвою l3 на консолі.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла основної () функції.
Властивості контейнера
Ось список властивостей контейнера:
Власність | Опис |
Послідовність | Контейнери послідовності впорядковують свої елементи в суворій лінійній послідовності. Доступ до елементів здійснюється за їх розташуванням у послідовності. |
Подвійно пов’язаний список | Кожен елемент має інформацію про те, як знайти попередні та наступні елементи. Це забезпечує постійний час для операцій вставки та видалення. |
Розміщувач даних | Об'єкт розподілювача використовується для динамічного зміни розміру сховища. |
Вставка в список
Існують різні функції, які ми можемо використовувати для вставки значень у список. Давайте продемонструємо це:
Приклад 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';}}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка алгоритму, щоб використовувати його функції.
- Включіть файл заголовка iostream, щоб використовувати його функції.
- Включіть файл заголовка списку, щоб використовувати його функції.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
- Створіть список із назвою my_list із набором з 4 цілих чисел.
- Вставте елемент 11 у передню частину списку з іменем my_list.
- Вставте елемент 18 у кінець списку з назвою my_list.
- Створіть його ітератор і за допомогою нього знайдіть елемент 10 зі списку my_list.
- За допомогою оператора if визначте, чи був виявлений вищевказаний елемент чи ні.
- Вставте елемент 21 перед вищезазначеним елементом, якщо він був знайдений.
- Кінець тіла оператора if.
- Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
- Роздрукуйте значення списку на консолі.
- Кінець корпусу петлі.
- Кінець тіла основної () функції.
Видалення зі списку
Можливо видалити елементи зі списку. Функція стирання () дозволяє видалити елемент або діапазон елементів зі списку.
- Щоб видалити один елемент, ви просто передаєте одне ціле положення. Елемент буде видалено.
- Щоб видалити діапазон, ви передаєте початковий та кінцевий ітератори. Давайте це продемонструємо.
Приклад 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;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка алгоритму, щоб використовувати його функції.
- Включіть файл заголовка iostream, щоб використовувати його функції.
- Включіть файл заголовка списку, щоб використовувати його функції.
- Включіть простір імен std у нашу програму, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
- Створіть список із назвою my_list із набором з 4 цілих чисел.
- Роздрукуйте текст на консолі.
- Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
- Роздрукуйте значення списку на консолі.
- Кінець тіла циклу for.
- Створіть ітератор i, який вказує на перший елемент списку.
- Використовуйте функцію erase (), на яку вказує ітератор i.
- Роздрукуйте текст на консолі.
- Використовуйте цикл for, щоб створити змінну циклу x. Ця змінна буде використана для перебору елементів списку.
- Роздрукуйте значення списку на консолі. Це відбувається після видалення.
- Кінець тіла циклу for.
- Після успішного завершення програма повинна повернути значення.
- Кінець тіла основної () функції.
Короткий зміст:
- Std :: list - це контейнер для зберігання.
- Це дозволяє вставляти та видаляти елементи з будь-якого місця в постійний час.
- Він реалізований як подвійне посилання
- До даних std :: list можна отримати двосторонній та послідовний доступ.
- std :: list не підтримує швидкий довільний доступ. Однак він підтримує послідовний доступ з усіх напрямків.
- Ви можете розкидати елементи списку std :: list у різних фрагментах пам'яті.
- Ви можете зменшити або розширити std :: list з обох кінців, якщо це необхідно під час роботи.
- Щоб вставити елементи в std :: list, ми використовуємо функцію insert ().
- Для видалення елементів зі списку std :: ми використовуємо функцію erase ().