logo

Framåtlista i C ++ STL

Forward_List container tillhandahåller implementering av ensam länkad lista datastruktur. Den lagrar data i icke-kontinuerligt minne där varje element pekar på nästa element i sekvensen. Detta gör infogning och radering snabbare när elementets position är känd.

Syntax

Framåtlistan definieras som std :: framåt_lista klassmall inuti< Forward_List > rubrikfil.



Forward_Listfl;

där

  • T: Datatyp av element i framåtlistan.
  • F: Namn tilldelat listan.

Deklaration och initialisering

En framåt_lista kan deklareras och initialiseras på flera sätt som visas i exemplet nedan:



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

Produktion
4 4 4 1 5 3 4 

Exempel: I programmet ovan är vi enkla initialiserade framåtlistan på tre sätt:

  • Påstående Forward_List Fl1 Skapar en tom framåtlista med heltal.
  • Påstående Forward_List FL2 (34) Skapar en framåtlista över storlek 3 och med varje element 4.
  • Påstående Forward_List FL3 = {1 5 3 4} Skapar en framåtlista och initialiseras med elementen från initialiseringslistan.

Grundläggande verksamhet

Här är de grundläggande operationerna vi kan utföra på en framåtlista:

1. Åtkomst till element

Framåtlistans element kan inte nås med index som matriser eller vektorer. Vi måste gå igenom listan i följd från början till önskad position för att komma åt den. Detta kan göras genom att öka börja() iterator men det är bättre att använda nästa() eller förskott() fungera.



Det första elementet i listan kan enkelt nås av främre() metod.

Exempel:

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

Produktion
1 3

Exempel: I ovanstående program trycks det första elementet med hjälp av främre() metod. För att komma åt det tredje elementet nästa() används för att flytta iteratorn två positioner från början och *det används för att avvisa iteratorn.

strängjämförelse

2. Infoga element

Element kan sättas in i framåtlistan med insert_after () fungera. Det kräver iteratorn, varefter elementet ska sättas in. Men snabb insättning på framsidan stöds av push_front () metod.

Exempel:

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

Produktion
1 5 3 4 

Förklaring: I detta program infogas det första elementet i framåt_listan framtill med push_front () fungera. Sedan skapas en iterator och flyttade en position framåt med förskott() fungera. Efter det elementet 5 sätts in efter det andra elementet med insert_after () fungera.

3. Uppdatera element

Värdet på befintliga element kan ändras helt enkelt genom att komma åt dem och använda uppdragsoperatör för att tilldela det nya värdet.

Exempel:

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

Produktion
111 333

4. Hitta element

Framåtlistan ger ingen medlemsfunktion för att söka efter ett element men vi kan använda hitta() algoritm för att hitta ett givet värde.

java slumpmässig matematik slumpmässig

Exempel :

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

Produktion
3

5. Traversing

En framåtlista kan korsas med börja() och avsluta() Iteratorer med en slinga men vi kan bara gå framåt och inte bakåt.

Exempel:

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

Produktion
1 5 3 4 

6. Ta bort element

I framåtlistan kan vi ta bort elementet på den givna positionen med erase_after () metod. Denna metod tar iteratorn till en position före målelementet. Snabb borttagning framifrån är möjlig med hjälp av Pop_front () metod.

Exempel:

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

Produktion
5 3 

7. Storleken på framåtlistan

Forward_List har inte en inbyggd storlek () -funktion. För att hitta dess storlek måste vi manuellt räkna elementen genom att korsa den med en slinga eller använda std :: avstånd.

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

Produktion
Size of forward_list: 4 

8. Tom ()

Det används för att kontrollera om framåt_listan är tom.
Den returnerar sant om listan är tom och falsk på annat sätt tillåter att snabbt verifiera om behållaren inte har några 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; } 

Produktion
The forward_list is empty. The forward_list is not empty. 

Tidskomplexitet

Tabellen nedan visar tidskomplexiteten för ovanstående operationer på framåtlistan:

Drift Tidskomplexitet
Åtkomst till första elementet O (1)
Åtkomst tillthelement På)
Sätt fram på framsidan O (1)
Infoga efter specifik position På)
Ta bort första elementet O (1)
Ta bort efter specifik position På)
Genomgång På)

Framåtlista vs -lista

Särdrag

python-initieringslista

Forward_List

lista

Typ av länkad lista

Ensam länkad lista

Dubbelt länkad lista

Genomgång

Kan bara korsa framåt

Kan korsa både framåt och bakåt

Minnesanvändning

slumpmässig ingen generator i java

Använder mindre minne (endast en pekare per nod)

Använder mer minne (två pekare per nod)

Införande/radering

Snabb insättning och radering men bara vid eller efter en given position

Snabb insättning och borttagning var som helst (före eller efter en position)

Funktioner som stöds

Begränsad jämfört med lista (ingen storlek () inga omvända iteratorer)

Mer komplett gränssnitt inklusive storlek () omvänd () dubbelriktade iteratorer.