Какво е 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';}}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на алгоритъма, за да използвате неговите функции.
- Включете заглавния файл на iostream, за да използвате неговите функции.
- Включете заглавния файл на списъка, за да използвате неговите функции.
- Извикайте функцията main (). Логиката на програмата трябва да бъде добавена в тялото на тази функция.
- Създайте списък с име my_list с набор от 4 цели числа.
- Използвайте цикъл for, за да създадете променлива на цикъл x. Тази променлива ще се използва за итерация върху елементите от списъка.
- Отпечатайте стойностите на списъка на конзолата.
- Край на тялото на цикъла за.
- Край на тялото на основната () функция.
Функции на списъка 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;}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на 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 ().