logo

Popis naprijed u C ++ STL

Naprijed_list spremnik pruža provedbu pojedinačno povezani popis Struktura podataka. Podaci pohranjuje u neprekidnoj memoriji gdje svaki element pokazuje na sljedeći element u nizu. Zbog toga brže umetanje i brisanje nakon što je poznat položaj elementa.

Sintaksa

Popis naprijed definiran je kao std :: naprijed_list predložak klase unutar< naprijed_list > Datoteka zaglavlja.

naprijed_listfl;



gdje

  • T: Vrsta podataka elemenata na popisu naprijed.
  • F: Ime dodijeljeno popisu naprijed.

Izjava i inicijalizacija

Awork_list može se deklarirati i inicijalizirati na nekoliko načina kao što je prikazano u donjem primjeru:

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

Izlaz
4 4 4 1 5 3 4 

Primjer: U gornjem programu smo jednostavni inicijalizirani popis naprijed na tri načina:

java arraylist sortiranje
  • Izjava naprijed_list Fl1 Stvara prazan popis cijelih brojeva.
  • Izjava naprijed_list FL2 (34) Stvara list naprijed veličine 3, a svaki element je 4.
  • Izjava naprijed_list fl3 = {1 5 3 4} Stvara popis naprijed i inicijalizira se s elementima s popisom inicijalizatora.

Osnovne operacije

Evo osnovnih operacija koje možemo izvesti na popisu naprijed:

1. Pristup elementima

Elementima popisa naprijed ne može se pristupiti pomoću indeksa poput nizova ili vektora. Moramo proći kroz popis uzastopno od početka do željenog položaja kako bismo mu pristupili. To se može učiniti povećanjem početi() iterator, ali bolje je koristiti sljedeći() ili Advance () funkcija.

Međutim, prvi element popisa može se lako pristupiti ispred() metoda.

Primjer:

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

Izlaz
1 3

Primjer: U gornjem programu prvi se element ispisuje pomoću korištenja ispred() metoda. Za pristup trećem elementu sljedeći() koristi se za pomicanje iteratora dva položaja od početka i *to koristi se za uklanjanje iteratora.

2. Umetanje elemenata

Elementi se mogu umetnuti na popis naprijed koristeći insert_after () funkcija. Zahtijeva iterator nakon kojeg se element treba umetnuti. Međutim, brzo umetanje na prednji dio podržava Push_Front () metoda.

Primjer:

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

Izlaz
1 5 3 4 

Obrazloženje: U ovom se programu prvi element naprijed_liste ubacuje na prednji dio pomoću Push_Front () funkcija. Tada se stvara iterator i pomakne jedan položaj prema naprijed koristeći Advance () funkcija. Nakon toga element 5 je umetnut nakon drugog elementa pomoću insert_after () funkcija.

3. Ažuriranje elemenata

Vrijednost postojećih elemenata može se promijeniti jednostavnim pristupom im i upotrebom dodjeljivanje dodijeliti novu vrijednost.

json u primjeru json

Primjer:

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

Izlaz
111 333

4. Pronalaženje elementa

Popis naprijed ne pruža nijednu funkciju člana za traženje elementa, ali možemo koristiti pronaći() Algoritam za pronalaženje bilo koje date vrijednost.

Primjer ::

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

Izlaz
3

5. Prolazak

Popis prema naprijed može se proći koristeći početi() i kraj() Iteratori s petljom, ali možemo samo naprijed, a ne natrag.

Primjer:

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

Izlaz
1 5 3 4 

6. Brisanje elemenata

U popisu naprijed možemo izbrisati element na danom položaju koristeći erase_after () metoda. Ova metoda preuzima iterator u jedan položaj prije ciljnog elementa. Brza brisanje s prednje strane moguće je koristiti pop_front () metoda.

java učiniti dok

Primjer:

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

Izlaz
5 3 

7. Veličina popisa naprijed

FORTHER_LIST nema funkciju ugrađene veličine (). Da bismo pronašli njegovu veličinu, moramo ručno brojati elemente prelaskom petljom ili pomoću STD :: Udaljenost.

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

Izlaz
Size of forward_list: 4 

8. prazno ()

Koristi se za provjeru je li naprijed_list prazan.
Vraća istinito ako je popis prazan i lažan, inače, omogućava brzo provjeru ima li spremnik podatke.

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

Izlaz
The forward_list is empty. The forward_list is not empty. 

Vremenska složenost

Donja tablica navodi vremensku složenost gore navedenih operacija na popisu naprijed:

Operacija Vremenska složenost
Pristup prvom elementu O (1)
Pristup nthelement Na)
Umetnite ispred O (1)
Umetnite nakon određenog položaja Na)
Izbriši prvi element O (1)
Izbrišite nakon određenog položaja Na)
Prelazak Na)

Popis naprijed prema listu

Značajka

naprijed_list

popis

Vrsta povezanog popisa

Pojedinačno povezani popis

generator slučajnih vrijednosti u Javi

Dvostruko povezani popis

Prelazak

Može samo krenuti naprijed

Može preći i naprijed i unatrag

Upotreba pamćenja

Koristi manje memorije (samo jedan pokazivač po čvoru)

Koristi više memorije (dva pokazivača po čvoru)

Umetanje/brisanje

Brzo umetanje i brisanje, ali samo na ili nakon određenog položaja

Brzo umetanje i brisanje bilo gdje (prije ili nakon položaja)

Podržane funkcije

Ograničeno u usporedbi s popisom (bez veličine () Nema obrnutog iteratora)

Potpunije sučelje, uključujući veličinu () reverse () dvosmjerni iteratori.



multipleksiranje