Шта је стд :: листа?
У језику Ц ++, стд :: лист односи се на контејнер за складиштење. Листа стд: омогућава вам уметање и уклањање предмета са било ког места. Стд :: лист је имплементиран као двоструко повезана листа. То значи да се подацима са листе може приступити двосмерно и узастопно.
Листа библиотека стандардних предложака не подржава брзи насумични приступ, али подржава секвенцијални приступ из свих праваца.
Можете расути елементе листе у различите комаде меморије. Информације потребне за узастопни приступ подацима чувају се у контејнеру. Листа стд :: се може проширити и смањити са оба краја по потреби током извођења. Интерни расподељивач аутоматски испуњава захтеве за складиштењем.
У овом упутству за Ц ++ научићете:
- Шта је стд :: листа?
- Зашто користити стд :: лист?
- Синтакса листе
- Функције листе Ц ++
- <лист> Конструктори
- Својства контејнера
- Уметање у листу
- Брисање са листе
Зашто користити стд :: лист?
Ево разлога за употребу стд :: Листа:
- Листа стд :: се боље упоређује са другим контејнерима секвенце као што су низ и вектори.
- Имају боље перформансе у уметању, премештању и извлачењу елемената из било ког положаја.
- Листа стд :: такође иде боље са алгоритмима који такве операције обављају интензивно.
Синтакса листе
Да бисмо дефинисали стд :: листу, морамо увести датотеку заглавља <лист>. Ево синтаксе дефиниције стд :: лист:
template < class Type, class Alloc =allocator> class list;
Ево описа горе наведених параметара:
- Т - дефинише врсту садржаног елемента.
Можете заменити Т било којим типом података, чак и кориснички дефинисаним типовима.
- Аллоц - дефинише тип објекта алокатора.
Ово подразумевано користи предложак класе алокатора. Овиси о вредности и користи једноставан модел алокације меморије.
Примери 1:
#include#include #include int main() {std::list
my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључите датотеку заглавља алгоритма да бисте користили његове функције.
- Укључите иостреам датотеку заглавља да бисте користили њене функције.
- Укључите датотеку заглавља листе да бисте користили њене функције.
- Позовите главну () функцију. Логику програма треба додати у тело ове функције.
- Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
- Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
- Одштампајте вредности листе на конзоли.
- Крај тела петље фор.
- Крај тела главне () функције.
Функције листе Ц ++
Ево уобичајених функција стд :: лист:
Функција | Опис |
инсерт () | Ова функција убацује нову ставку пре положаја на који итератор показује. |
потисне() | Ове функције додају нову ставку на крају листе. |
пусх_фронт () | Додаје нову ставку на челу листе. |
поп_фронт () | Брише прву ставку листе. |
величина () | Ова функција одређује број елемената листе. |
предњи () | Да би се утврдиле прве ставке листе. |
назад() | За одређивање последње ставке листе. |
обрнуто () | Преокреће ставке листе. |
спајање () | Спаја две сортиране листе. |
<лист> Конструктори
Ево листе функција коју пружа датотека заглавља <лист>:
- Подразумевани конструктор стд :: лист :: лист () - Ствара празну листу, то, са нула елемената.
- Конструктор попуњавања стд :: лист :: лист () - Ствара листу са н елемената и сваком елементу додељује вредност нула (0).
- Конструктор опсега стд :: лист :: лист () - креира листу са много елемената у распону од првог до последњег.
- Копирај конструктор стд :: лист :: лист () - Креира листу са копијом сваког елемента који се налази на постојећој листи.
- Мове цонструцтор стд :: лист :: лист () - креира листу са елементима друге листе користећи семантику премештања.
- Конструктор листе иницијализатора стд :: лист :: лист () - Креира листу са елементима друге листе користећи семантику премештања.
Пример 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 са скупом од 3 целобројне вредности.
- Направите листу која се зове л2 са свим елементима на листи која се зове л1, од почетка до краја.
- Направите листу под називом л3 користећи семантику премештања. Листа л3 имаће исти садржај као листа л2.
- Одштампајте величину листе под називом л на конзоли уз други текст.
- Одштампајте мало текста на конзоли.
- Направите итератор са именом и користите га за итирање преко елемената листе која се зове л2.
- Одштампајте елементе листе под називом л2 на конзоли.
- Одштампајте мало текста на конзоли.
- Направите итератор са именом и користите га за итирање преко елемената листе која се зове л3.
- Одштампајте елементе листе под називом л3 на конзоли.
- Програм мора вратити вредност након успешног завршетка.
- Крај тела главне () функције.
Својства контејнера
Ево листе својстава контејнера:
Својство | Опис |
Низ | Контејнери за секвенце уређују своје елементе у строгом линеарном низу. Елементима се приступа према положају у низу. |
Двоструко повезана листа | Сваки елемент има информације о томе како лоцирати претходне и следеће елементе. Ово омогућава константно време за операције уметања и брисања. |
Свестан додељивача | Објекат додељивача користи се за динамичко мењање величине складишта. |
Уметање у листу
Постоје различите функције помоћу којих можемо уметнути вредности на листу. Покажимо ово:
Пример 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';}}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључите датотеку заглавља алгоритма да бисте користили његове функције.
- Укључите иостреам датотеку заглавља да бисте користили њене функције.
- Укључите датотеку заглавља листе да бисте користили њене функције.
- Позовите главну () функцију. Логику програма треба додати у тело ове функције.
- Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
- Уметните елемент 11 на почетак листе под називом ми_лист.
- Уметните елемент 18 на крај листе која се зове ми_лист.
- Направите итератор и помоћу њега пронађите елемент 10 са листе ми_лист.
- Користите иф изјаву да бисте утврдили да ли је горњи елемент пронађен или није.
- Уметните елемент 21 пре горенаведеног елемента ако је пронађен.
- Крај тела изјаве иф.
- Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
- Одштампајте вредности листе на конзоли.
- Крај тела петље фор.
- Крај тела главне () функције.
Брисање са листе
Могуће је избрисати ставке са листе. Функција брисања () омогућава вам брисање ставки или низа ставки са листе.
- Да бисте избрисали једну ставку, једноставно прођете један целобројни положај. Ставка ће бити избрисана.
- Да бисте избрисали опсег, прослеђујете почетни и завршни итератор. Покажимо ово.
Пример 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;}
Излаз:
Ево снимка екрана кода:
Објашњење кода:
- Укључите датотеку заглавља алгоритма да бисте користили његове функције.
- Укључите иостреам датотеку заглавља да бисте користили њене функције.
- Укључите датотеку заглавља листе да бисте користили њене функције.
- Укључите стд простор имена у наш програм да користи његове класе без позива.
- Позовите главну () функцију. Логику програма треба додати у тело ове функције.
- Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
- Одштампајте мало текста на конзоли.
- Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
- Одштампајте вредности листе на конзоли.
- Крај тела петље фор.
- Направите итератор и који показује на први елемент листе.
- Користите функцију ерасе () на коју указује итератор и.
- Одштампајте мало текста на конзоли.
- Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
- Одштампајте вредности листе на конзоли. Ово долази након брисања.
- Крај тела петље фор.
- Програм мора вратити вредност након успешног завршетка.
- Крај тела главне () функције.
Резиме:
- Листа стд :: је контејнер за складиштење.
- Омогућава уметање и брисање предмета са било ког места у стално време.
- Примењен је као двострука веза
- Податцима стд :: лист може се приступити двосмерно и узастопно.
- стд :: лист не подржава брзи насумични приступ. Међутим, подржава секвенцијални приступ из свих праваца.
- Елементе листе стд :: лист можете расути у различите комаде меморије.
- Можете стиснути или проширити стд :: лист са оба краја по потреби током извођења.
- Да бисмо уметнули ставке у стд :: лист, користимо функцију инсерт ().
- Да бисмо избрисали ставке са листе стд ::, користимо функцију ерасе ().