logo

Fremover i C ++ STL

Forward_list Container gir implementering av Enkelt koblet liste datastruktur. Den lagrer data i ikke-sammenhengende minne der hvert element peker på neste element i sekvensen. Dette gjør innsetting og sletting raskere når elementets plassering er kjent.

Syntaks

Fremoverliste er definert som STD :: Forward_list Klassemal inne i< Forward_list > Headerfil.



Forward_listfl;

hvor

  • T: Datatype av elementer i listen fremover.
  • F: Navn tildelt fremoverlisten.

Erklæring og initialisering

En forward_list kan deklareres og initialiseres på flere måter som vist i eksemplet nedenfor:



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

Produksjon
4 4 4 1 5 3 4 

Eksempel: I programmet ovenfor er vi enkel initialisert fremoverliste på tre måter:

  • Uttalelse Forward_list FL1 Oppretter en tom liste over heltall.
  • Uttalelse Forward_list FL2 (34) Oppretter en fremoverliste over størrelse 3 og med hvert element som er 4.
  • Uttalelse Forward_list fl3 = {1 5 3 4} Oppretter en fremoverliste og initialiserer med elementene fra Initializer -listen.

Grunnleggende operasjoner

Her er de grunnleggende operasjonene vi kan utføre på en fremover liste:

1. Å få tilgang til elementer

Forward Lists elementer kan ikke nås ved hjelp av indekser som matriser eller vektorer. Vi må gå gjennom listen sekvensielt fra starten til ønsket posisjon for å få tilgang til den. Dette kan gjøres ved å øke begynne() iterator, men det er bedre å bruke Neste () eller avansere() funksjon.



Imidlertid kan det første elementet på listen enkelt få tilgang til front() metode.

Eksempel:

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

Produksjon
1 3

Eksempel: I programmet ovenfor skrives det første elementet ved bruk av front() metode. For å få tilgang til det tredje elementet Neste () brukes til å flytte iteratoren to posisjoner fra begynnelsen og *den brukes til å henvise iteratoren.

2. Sett inn elementer

Elementer kan settes inn i fremoverlisten ved hjelp av insert_after () funksjon. Det krever iterator som elementet skal settes inn. Imidlertid støttes rask innsetting foran push_front () metode.

Eksempel:

java-strengen inneholder
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; } 

Produksjon
1 5 3 4 

Forklaring: I dette programmet settes det første elementet i Forward_list push_front () funksjon. Deretter opprettes en iterator og flyttet en posisjon fremover ved hjelp av avansere() funksjon. Etter det elementet 5 settes inn etter det andre elementet ved hjelp av insert_after () funksjon.

3. Oppdatering av elementer

Verdien av eksisterende elementer kan endres ganske enkelt ved å få tilgang til dem og bruke Oppdragsoperatør for å tilordne den nye verdien.

Eksempel:

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

Produksjon
111 333

4. Finne element

Fremoverlisten gir ingen medlemsfunksjon for å søke etter et element, men vi kan bruke finne() algoritme for å finne en gitt verdi.

Eksempel :

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

Produksjon
3

5. Traversing

En fremoverliste kan krysses ved hjelp av begynne() og slutt() Iteratorer med en sløyfe, men vi kan bare bevege oss fremover og ikke bakover.

Eksempel:

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

Produksjon
1 5 3 4 

6. Slette elementer

I fremoverliste kan vi slette elementet i den gitte posisjonen ved hjelp av erase_after () metode. Denne metoden tar iteratoren til en posisjon før målelementet. Rask sletting fra fronten er mulig ved bruk av POP_FRONT () metode.

Eksempel:

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

Produksjon
5 3 

7. Størrelse på fremoverliste

Forward_list har ikke en innebygd størrelse () -funksjon. For å finne størrelsen må vi manuelt telle elementene ved å krysse den med en sløyfe eller bruke STD :: avstand.

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

Produksjon
Size of forward_list: 4 

8. tom ()

Det brukes til å sjekke om fremover_listen er tom.
Det returnerer sant hvis listen er tom og usant, ellers tillater å raskt bekrefte om beholderen ikke har noen data.

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

Produksjon
The forward_list is empty. The forward_list is not empty. 

Tidskompleksitet

Tabellen nedenfor viser tidskompleksiteten til ovennevnte operasjoner på fremoverliste:

liste metoder java
Operasjon Tidskompleksitet
Få tilgang til det første elementet O (1)
Tilgang nthelement På)
Sett inn foran O (1)
Sett inn etter spesifikk stilling På)
Slett første element O (1)
Slett etter spesifikk stilling På)
Traversal På)

Fremover liste vs liste

Trekk

Forward_list

liste

Type koblet liste

Enkelt koblet liste

Dobbeltkoblet liste

Traversal

Kan bare krysse fremover

Kan krysse både fremover og bakover

Minnebruk

Bruker mindre minne (bare en peker per node)

Bruker mer minne (to pekere per node)

Innsetting/sletting

Rask innsetting og sletting, men bare på eller etter en gitt stilling

Rask innsetting og sletting hvor som helst (før eller etter en stilling)

Funksjoner støttet

Begrenset sammenlignet med liste (ingen størrelse () ingen omvendte iteratorer)

Mer komplett grensesnitt inkludert størrelse () reverse () toveis iteratorer.