Стд :: лист у Ц ++ са примером

Преглед садржаја:

Anonim

Шта је стд :: листа?

У језику Ц ++, стд :: лист односи се на контејнер за складиштење. Листа стд: омогућава вам уметање и уклањање предмета са било ког места. Стд :: лист је имплементиран као двоструко повезана листа. То значи да се подацима са листе може приступити двосмерно и узастопно.

Листа библиотека стандардних предложака не подржава брзи насумични приступ, али подржава секвенцијални приступ из свих праваца.

Можете расути елементе листе у различите комаде меморије. Информације потребне за узастопни приступ подацима чувају се у контејнеру. Листа стд :: се може проширити и смањити са оба краја по потреби током извођења. Интерни расподељивач аутоматски испуњава захтеве за складиштењем.

У овом упутству за Ц ++ научићете:

  • Шта је стд :: листа?
  • Зашто користити стд :: лист?
  • Синтакса листе
  • Функције листе Ц ++
  • <лист> Конструктори
  • Својства контејнера
  • Уметање у листу
  • Брисање са листе

Зашто користити стд :: лист?

Ево разлога за употребу стд :: Листа:

  • Листа стд :: се боље упоређује са другим контејнерима секвенце као што су низ и вектори.
  • Имају боље перформансе у уметању, премештању и извлачењу елемената из било ког положаја.
  • Листа стд :: такође иде боље са алгоритмима који такве операције обављају интензивно.

Синтакса листе

Да бисмо дефинисали стд :: листу, морамо увести датотеку заглавља <лист>. Ево синтаксе дефиниције стд :: лист:

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';}}

Излаз:

Ево снимка екрана кода:

Објашњење кода:

  1. Укључите датотеку заглавља алгоритма да бисте користили његове функције.
  2. Укључите иостреам датотеку заглавља да бисте користили њене функције.
  3. Укључите датотеку заглавља листе да бисте користили њене функције.
  4. Позовите главну () функцију. Логику програма треба додати у тело ове функције.
  5. Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
  6. Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
  7. Одштампајте вредности листе на конзоли.
  8. Крај тела петље фор.
  9. Крај тела главне () функције.

Функције листе Ц ++

Ево уобичајених функција стд :: лист:

Функција Опис
инсерт () Ова функција убацује нову ставку пре положаја на који итератор показује.
потисне() Ове функције додају нову ставку на крају листе.
пусх_фронт () Додаје нову ставку на челу листе.
поп_фронт () Брише прву ставку листе.
величина () Ова функција одређује број елемената листе.
предњи () Да би се утврдиле прве ставке листе.
назад() За одређивање последње ставке листе.
обрнуто () Преокреће ставке листе.
спајање () Спаја две сортиране листе.

<лист> Конструктори

Ево листе функција коју пружа датотека заглавља <лист>:

  • Подразумевани конструктор стд :: лист :: лист () - Ствара празну листу, то, са нула елемената.
  • Конструктор попуњавања стд :: лист :: лист () - Ствара листу са н елемената и сваком елементу додељује вредност нула (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. Укључите иостреам датотеку заглавља да бисте користили њене функције.
  2. Укључите датотеку заглавља листе да бисте користили њене функције.
  3. Укључите стд простор имена у код да бисте користили његове класе без позивања.
  4. Позовите главну () функцију. Логику програма треба додати у тело ове функције.
  5. Направите празну листу под називом л.
  6. Направите листу под називом л1 са скупом од 3 целобројне вредности.
  7. Направите листу која се зове л2 са свим елементима на листи која се зове л1, од почетка до краја.
  8. Направите листу под називом л3 користећи семантику премештања. Листа л3 имаће исти садржај као листа л2.
  9. Одштампајте величину листе под називом л на конзоли уз други текст.
  10. Одштампајте мало текста на конзоли.
  11. Направите итератор са именом и користите га за итирање преко елемената листе која се зове л2.
  12. Одштампајте елементе листе под називом л2 на конзоли.
  13. Одштампајте мало текста на конзоли.
  14. Направите итератор са именом и користите га за итирање преко елемената листе која се зове л3.
  15. Одштампајте елементе листе под називом л3 на конзоли.
  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. Укључите иостреам датотеку заглавља да бисте користили њене функције.
  3. Укључите датотеку заглавља листе да бисте користили њене функције.
  4. Позовите главну () функцију. Логику програма треба додати у тело ове функције.
  5. Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
  6. Уметните елемент 11 на почетак листе под називом ми_лист.
  7. Уметните елемент 18 на крај листе која се зове ми_лист.
  8. Направите итератор и помоћу њега пронађите елемент 10 са листе ми_лист.
  9. Користите иф изјаву да бисте утврдили да ли је горњи елемент пронађен или није.
  10. Уметните елемент 21 пре горенаведеног елемента ако је пронађен.
  11. Крај тела изјаве иф.
  12. Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
  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. Укључите иостреам датотеку заглавља да бисте користили њене функције.
  3. Укључите датотеку заглавља листе да бисте користили њене функције.
  4. Укључите стд простор имена у наш програм да користи његове класе без позива.
  5. Позовите главну () функцију. Логику програма треба додати у тело ове функције.
  6. Направите листу под називом ми_лист са скупом од 4 целобројне вредности.
  7. Одштампајте мало текста на конзоли.
  8. Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
  9. Одштампајте вредности листе на конзоли.
  10. Крај тела петље фор.
  11. Направите итератор и који показује на први елемент листе.
  12. Користите функцију ерасе () на коју указује итератор и.
  13. Одштампајте мало текста на конзоли.
  14. Користите фор петљу за креирање променљиве петље к. Ова променљива ће се користити за прелазак преко елемената листе.
  15. Одштампајте вредности листе на конзоли. Ово долази након брисања.
  16. Крај тела петље фор.
  17. Програм мора вратити вредност након успешног завршетка.
  18. Крај тела главне () функције.

Резиме:

  • Листа стд :: је контејнер за складиштење.
  • Омогућава уметање и брисање предмета са било ког места у стално време.
  • Примењен је као двострука веза
  • Податцима стд :: лист може се приступити двосмерно и узастопно.
  • стд :: лист не подржава брзи насумични приступ. Међутим, подржава секвенцијални приступ из свих праваца.
  • Елементе листе стд :: лист можете расути у различите комаде меморије.
  • Можете стиснути или проширити стд :: лист са оба краја по потреби током извођења.
  • Да бисмо уметнули ставке у стд :: лист, користимо функцију инсерт ().
  • Да бисмо избрисали ставке са листе стд ::, користимо функцију ерасе ().