Std :: list в C ++ с пример

Съдържание:

Anonim

Какво е std :: list?

В C ++ списъкът std :: се отнася до контейнер за съхранение. Списъкът std: ви позволява да вмъквате и премахвате елементи от всяко място. Std :: list е изпълнен като двойно свързан списък. Това означава, че данните от списъка могат да бъдат достъпни двупосочно и последователно.

Списъкът със стандартна библиотека с шаблони не поддържа бърз произволен достъп, но поддържа последователен достъп от всички посоки.

Можете да разпръснете елементи от списъка в различни парчета памет. Информацията, необходима за последователен достъп до данни, се съхранява в контейнер. Списъкът std :: може да се разширява и свива от двата края при необходимост по време на изпълнение. Вътрешен разпределител автоматично отговаря на изискванията за съхранение.

В този урок за C ++ ще научите:

  • Какво е std :: list?
  • Защо да използвам std :: list?
  • Синтаксис на списъка
  • Функции на списъка C ++
  • Конструктори
  • Свойства на контейнера
  • Вмъкване в списък
  • Изтриване от списък

Защо да използвам std :: list?

Ето причината за използването на std :: List:

  • Списъкът std :: прави по-добро сравнение с други контейнери за последователност като масив и вектор.
  • Те имат по-добри резултати при вмъкване, преместване и извличане на елементи от всяка позиция.
  • Списъкът std :: също се справя по-добре с алгоритми, които извършват такива операции интензивно.

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

За да дефинираме 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. Край на тялото на основната () функция.

Функции на списъка C ++

Ето общите функции на std :: list:

Функция Описание
вмъкване () Тази функция вмъква нов елемент преди позицията, която итераторът сочи.
избутвам() Тези функции добавят нов елемент в края на списъка.
push_front () Той добавя нов елемент отпред на списъка.
pop_front () Той изтрива първия елемент от списъка.
размер () Тази функция определя броя на елементите на списъка.
отпред () За да определите първите елементи в списъка.
обратно() За да определите последния елемент от списъка.
обратен() Той обръща елементите от списъка.
обединяване () Той обединява два сортирани списъка.

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

Ето списъка на функциите, предоставени от заглавния файл :

  • Конструктор по подразбиране std :: list :: list () - Създава празен списък, който с нулеви елементи.
  • Попълнете конструктора std :: list :: list () - Той създава списък с n елемента и присвоява стойност нула (0) на всеки елемент.
  • Конструктор на диапазон std :: list :: list () - създава списък с много елементи в диапазона от първи до последен.
  • Копиращ конструктор std :: list :: list () - Създава списък с копие на всеки елемент, съдържащ се в съществуващия списък.
  • Move constructor 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 ().