logo

Напредна листа у Ц ++ СТЛ

Напред_лист Контејнер пружа спровођење Поједина повезана листа Структура података. Чува податке у неселисној меморији на којима сваки елемент указује на следећи елемент у низу. То брже чини уметање и брисање након што је положај елемента познат.

Синтакса

Листа напред је дефинисана као СТД :: Форвард_Лист шаблон класе унутар< напред_лист > Филе заглавља.



напред_листФЛ;

где

  • Т: Врста података елемената на листи напред.
  • Ф: Име додељено на листу напред.

Изјава и иницијализација

Напред-лист се може прогласити и иницијализовати на више начина као што је приказано у доњем примеру:



C++
#include    using namespace std; void printFL(forward_list<int>& fl) {  for (auto i : fl)  cout << i << ' ';  cout << 'n'; } int main() {    // Creating an empty forward_list  forward_list<int> fl1;  // Creating a forward_list with  // default value  forward_list<int> fl2(3 4);    // Creating a forward_list from an  // initializer list  forward_list<int> fl3 = {1 5 3 4};    printFL(fl2);  printFL(fl3);  return 0; } 

Излаз
4 4 4 1 5 3 4 

Пример: У горњем програму на три начина смо једноставно иницијализиране напред напред:

  • Изјава напред_лист ФЛ1 Ствара празничну листу целих бројева.
  • Изјава напред_лист ФЛ2 (34) Ствара напредну листу величине 3 и са сваким елементом је 4.
  • Изјава напред_лист ФЛ3 = {1 5 3 4} Ствара листу напред и иницијализира елементима из листе иницијализатора.

Основне операције

Ево основних операција које можемо наступити на напредну листу:

1. Приступ елементима

Елементи напред листе не могу се приступити коришћењем индекса попут низова или вектора. Морамо да прођемо кроз листу узастопно од почетка до жељеног положаја да бисте је приступили. То се може учинити повећањем за почетак () итератор, али боље је користити следећи () или унапред () Функција.



Међутим, први елемент листе могу се лако приступити предњи () Метода.

стринг у инт у Јави

Пример:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Access the first element  cout << fl.front() << endl;    // Access third element  auto it = next(fl.begin() 2);  cout << *it;  return 0; } 

Излаз
1 3

Пример: У горњем програму први елемент је штампано коришћењем предњи () Метода. Да бисте приступили трећи елемент следећи () користи се за премештање итератора две положаје од почетка и * то користи се за поремећај итератора.

2 Уметање елемената

Елементи се могу уметнути у листу напред користећи Инсерт_Афтер () Функција. Потребан је итератор након кога треба уметнути елемент. Међутим, брзо уметање на предњој страни подржава пусх_фронт () Метода.

Салман Кхан аге

Пример:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {5 4};  // Inserting Element at front  fl.push_front(1);    // Insert 3 after the second element  auto it = fl.begin();  advance(it 1);  fl.insert_after(it 3);    for (auto x: fl) cout << x << ' ';  return 0; } 

Излаз
1 5 3 4 

Објашњење: У овом програму је први елемент напредне датотеке убачен на предњи начин користећи пусх_фронт () Функција. Тада је итератор креиран и премештен један положај напред користећи унапред () Функција. Након тога елемент 5 је убачен након другог елемента помоћу Инсерт_Афтер () Функција.

3. Ажурирање елемената

Вредност постојећих елемената може се мењати једноставним приступањем њима и коришћењем оператор додељења да доделите нову вредност.

Пример:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Updating first element  fl.front() = 111;  cout << fl.front() << endl;    // Updating third element  auto it = next(fl.begin() 2);  *it = 333;  cout << *it;  return 0; } 

Излаз
111 333

4. Проналажење елемента

Напредна листа не пружа никакву функцију члана да тражи елемент, али можемо да користимо Пронађи () алгоритам да пронађе било коју дату вредност.

Пример :

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Finding 3  auto it = find(fl.begin() fl.end() 3);    if (it != fl.end()) cout << *it;  else cout << 'Element not Found';  return 0; } 

Излаз
3

5. Трајање

Напредна листа се може прелазити помоћу за почетак () и крај () Итератори са петљом, али можемо се само кретати напријед и не назад.

Пример:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};    // Traversing using range-based for loop  for(auto i : fl)  cout << i << ' ';  cout << endl;    return 0; } 

Излаз
1 5 3 4 

6. Брисање елемената

На напријед можемо да избришемо елемент на датом положају користећи Ерасе_Афтер () Метода. Ова метода води итератор на један положај пре циљаног елемента. Брзо брисање са предње стране је могуће користећи поп_фронт () Метода.

цео број у низ

Пример:

C++
#include    using namespace std; int main() {  forward_list<int> fl = {1 5 3 4};  // Delete first element  fl.pop_front();    // Delete third element  auto it = fl.begin();  advance(it 1);  fl.erase_after(it);    for (auto x: fl) cout << x << ' ';  return 0; } 

Излаз
5 3 

7. Величина напред

напред_ лист нема уграђену функцију величине (). Да бисте пронашли његову величину, морамо ручно пребројати елементе прелазећи га са петљом или користећи СТД :: Удаљеност.

C++
#include    #include  #include    using namespace std; int main() {  forward_list<int> flist={10203040};  //Calculate size by counting elements using std:: distance  int size=distance(flist.begin()flist.end());  cout<<'Size of forward_list: '<<size<<endl;  return 0; } 

Излаз
Size of forward_list: 4 

8. празно ()

Користи се за проверу да ли је напред-лист празан.
Враћа се ТРУЕ ако је листа празна и лажна иначе омогућавање брзо серисања ако контејнер нема података.

C++
#include    #include  using namespace std; int main() {  forward_list<int> flist;  if (flist.empty()) {  cout << 'The forward_list is empty.' << endl;  }  flist.push_front(10);  if (!flist.empty()) {  cout << 'The forward_list is not empty.' << endl;  }  return 0; } 

Излаз
The forward_list is empty. The forward_list is not empty. 

Сложеност времена

Доље табела наводи се временски сложеност горе наведених операција на напријед Листа:

Рад Сложеност времена
Приступите првом елементу О (1)
Приступа нуелемент О (н)
Уметање напред О (1)
Уметните након одређеног положаја О (н)
Избришите први елемент О (1)
Избришите након одређеног положаја О (н)
Прелаз О (н)

Напис напред ВС Листа

Значајка

напред_лист

списак

Врста повезане листе

Поједина повезана листа

хасхсет вс хасхмап

Двоструко повезана листа

Прелаз

Може да пређе само напред

Може да пређе напред и назад

Употреба меморије

Користи мање меморије (само један показивач по чвору)

Користи више меморије (два показивача по чвору)

Уметање / брисање

Брзо убацивање и брисање, али само на или после одређеног положаја

Брзо уметање и брисање било где (пре или после положаја)

Подржане функције

Ограничена у поређењу са листом (без величине () без преокрета итератора)

Комплетније интерфејс, укључујући величину () Реверсе () двосмерни итератори.



римски бројеви 1100