logo

Seznam v C ++ STL

Naprej_list vsebnik zagotavlja izvajanje Singly povezan seznam struktura podatkov. Shrani podatke v neprekinjenem pomnilniku, kjer vsak element kaže na naslednji element v zaporedju. Zaradi tega je vstavljanje in brisanje hitreje, ko je znan položaj elementa.

Sintaksa

Seznam naprej je opredeljen kot std :: Forward_list predloga razreda znotraj< naprej_list > datoteka glave.



naprej_listfl;

Kje

razvrščeni arraylist java
  • T: Vrsta podatkov Elementi na seznamu naprej.
  • F: Ime, dodeljeno na seznamu naprej.

Deklaracija in inicializacija

Napadalec je mogoče razglasiti in inicializirati na več načinov, kot je prikazano v spodnjem primeru:



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

Izhod
4 4 4 1 5 3 4 

Primer: V zgornjem programu smo preprost inicializirani seznam naprej na tri načine:

  • Izjava naprej_list Fl1 Ustvari prazen seznam številnih števil.
  • Izjava naprej_list FL2 (34) Ustvari seznam spredaj velikosti 3, vsak element pa 4.
  • Izjava naprej_list fl3 = {1 5 3 4} Ustvari seznam naprej in se inicializira z elementi, ki tvorijo seznam inicializatorja.

Osnovne operacije

Tu so osnovne operacije, ki jih lahko izvajamo na seznamu naprej:

1. dostop do elementov

Elementov seznama naprej ni mogoče dostopati z indeksi, kot so nizi ali vektorji. Za dostop do njega moramo zaporedno iti skozi seznam od začetka do želenega položaja. To je mogoče storiti s povečanjem začeti () iterator, vendar je bolje uporabiti naslednji () ali vnaprej () delovanje.



Vendar lahko do prvega elementa seznama enostavno dostopate FRONT () metoda.

Primer:

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

Izhod
1 3

Primer: V zgornjem programu je prvi element natisnjen z uporabo FRONT () metoda. Za dostop do tretjega elementa naslednji () se uporablja za premikanje iteratorja dva položaja od začetka in *to se uporablja za odstranjevanje iteratorja.

string find c++

2. Vstavljanje elementov

Elemente lahko vstavite na seznam naprej s pomočjo uporabe INSERT_AFTER () delovanje. Zahteva iterator, po katerem je treba vstaviti element. Vendar hitro vstavljanje spredaj podpira push_front () metoda.

Primer:

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

Izhod
1 5 3 4 

Pojasnilo: V tem programu se spredaj vstavi prvi element naprej_lista s pomočjo push_front () delovanje. Nato se ustvari iterator in premakne en položaj naprej s pomočjo vnaprej () delovanje. Po tem element 5 je vstavljen po drugem elementu z uporabo INSERT_AFTER () delovanje.

3. Posodabljanje elementov

Vrednost obstoječih elementov je mogoče preprosto spremeniti z dostopom do njih in z uporabo Operater dodelitve za dodelitev nove vrednosti.

Primer:

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

Izhod
111 333

4. Iskanje elementa

Seznam naprej ne zagotavlja nobene funkcije člana za iskanje elementa, lahko pa uporabimo find () algoritem za iskanje katere koli vrednosti.

Primer :

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

Izhod
3

5. Traversing

Seznam naprej je mogoče prečkati s pomočjo začeti () in konec () Iteratorji z zanko, vendar se lahko samo premaknemo naprej in ne nazaj.

Primer:

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

Izhod
1 5 3 4 

6. Brisanje elementov

Na seznamu naprej lahko element na danem položaju izbrišemo s pomočjo erase_after () metoda. Ta metoda popelje iterator v en položaj pred ciljnim elementom. Hitro brisanje spredaj je mogoče z uporabo pop_front () metoda.

višina kat timpf

Primer:

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

Izhod
5 3 

7. Velikost seznama naprej

Forward_list nima vgrajene funkcije velikosti (). Če želite najti svojo velikost, moramo ročno prešteti elemente tako, da jih prečkamo z zanko ali z razdaljo std ::.

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

Izhod
Size of forward_list: 4 

8. prazno ()

Uporablja se za preverjanje, ali je naprej_list prazen.
Vrne resnično, če je seznam prazen in napačen, sicer pa omogoča hitro preverjanje, če vsebnik nima podatkov.

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

Izhod
The forward_list is empty. The forward_list is not empty. 

Časovna zapletenost

Spodnja tabela navaja časovno zapletenost zgornjih operacij na seznamu naprej:

Delovanje Časovna zapletenost
Dostop do prvega elementa O (1)
Dostop nthelement O (n)
Vstavite spredaj O (1)
Vstavite po določenem položaju O (n)
Izbriši prvi element O (1)
Izbrišite po določenem položaju O (n)
Traversal O (n)

Seznam naprej v primerjavi s seznamom

Značilnost

naprej_list

seznam

Vrsta povezanega seznama

Singly povezan seznam

Dvojno povezan seznam

Traversal

Lahko samo prečkate naprej

v Javi

Lahko prečka tako naprej kot nazaj

Uporaba pomnilnika

Uporablja manj pomnilnika (samo en kazalec na vozlišče)

Uporablja več pomnilnika (dva kazalca na vozlišče)

Vstavljanje/brisanje

Hitro vstavljanje in brisanje, vendar le ob določenem položaju ali po njem

Hitro vstavljanje in brisanje kjer koli (pred ali po položaju)

Funkcije podprte

Omejeno v primerjavi s seznamom (brez velikosti () brez povratnih iteratorjev)

Popolnejši vmesnik, vključno z velikostjo () reverzni () dvosmerni iteratorji.



java case statement