logo

„C ++ STL“ į priekį sąrašas

„Forward_list“ konteineris pateikia įgyvendinimą atskirai susietas sąrašas Duomenų struktūra. Jis kaupia duomenis nenumaldomoje atmintyje, kur kiekvienas elementas nurodo į kitą sekos elementą. Tai leidžia įterpti ir ištrynti greičiau, kai žinoma elemento padėtis.

Sintaksė

Į priekį sąrašas yra apibrėžiamas kaip STD :: Forward_list klasės šablonas< „Forward_list“ > antraštės failas.



tinklo operacinė sistema

„Forward_list“fl;

Kur

  • T: Elementų duomenų tipas priekiniame sąraše.
  • F: Vardas, priskirtas į išankstinį sąrašą.

Deklaracija ir inicijavimas

„Forward_List“ galima deklaruoti ir inicijuoti keliais būdais, kaip parodyta žemiau pateiktame pavyzdyje:



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

Išvestis
4 4 4 1 5 3 4 

Pavyzdys: Aukščiau pateiktoje programoje mes esame paprastas inicializuotas į priekį sąrašas trimis būdais:

  • Pareiškimas „Forward_list“ FL1 Sukuria tuščią sveikųjų skaičių sąrašą.
  • Pareiškimas „Forward_list“ FL2 (34) Sukuria 3 dydžio sąrašą į priekį ir kiekvienas elementas yra 4.
  • Pareiškimas „Forward_list“ fl3 = {1 5 3 4} Sukuria išankstinio sąrašo sąrašą ir inicijuoja elementus, sudarydami „Initizer“ sąrašą.

Pagrindinės operacijos

Čia yra pagrindinės operacijos, kurias galime atlikti į priekį:

1. Prieigos elementai

Į priekinio sąrašo elementus negalima pasiekti naudojant tokius indeksus kaip masyvai ar vektoriai. Turime pereiti sąrašą nuosekliai nuo pradžios iki norimos padėties, kad galėtume jį pasiekti. Tai galima padaryti padidinant pradėti () iteratorius, bet geriau naudoti Kitas () arba išankstinis () funkcija.



Tačiau pirmąjį sąrašo elementą galima lengvai pasiekti priekis () metodas.

Pavyzdys:

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

Išvestis
1 3

Pavyzdys: Aukščiau pateiktoje programoje pirmasis elementas atspausdinamas naudojant priekis () metodas. Norėdami pasiekti trečiąjį elementą Kitas () naudojamas iteratoriui perkelti dvi pozicijas nuo pat pradžių ir *Tai yra naudojamas iteratoriui nukirpti.

2. Elementų įterpimas

Elementus galima įterpti į priekinio sąrašą naudojant insert_after () funkcija. Tam reikia iteratoriaus, po kurio elementas turi būti įterptas. Tačiau greitą įterpimą priekyje palaiko Push_front () metodas.

Pavyzdys:

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

Išvestis
1 5 3 4 

Paaiškinimas: Šioje programoje pirmasis „Forward_List“ elementas įterpiamas priekyje, naudojant Push_front () funkcija. Tada sukuriamas iteratorius ir perkeltas viena vieta į priekį naudojant išankstinis () funkcija. Po to elementas 5 yra įterptas po antrojo elemento, naudojant insert_after () funkcija.

3. Atnaujinimo elementai

Esamų elementų vertę galima pakeisti tiesiog prieiga prie jų ir naudojant Paskyrimo operatorius priskirti naują vertę.

Pavyzdys:

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

Išvestis
111 333

4. Rasti elementą

Išankstinis sąrašas nepateikia jokios nario funkcijos, kad būtų galima ieškoti elemento, tačiau mes galime naudoti rasti () Algoritmas, norint rasti bet kurią vertę.

Pavyzdys :

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

Išvestis
3

5. Kelionė

Išankstinį sąrašą galima apeiti naudojant pradėti () ir pabaiga () Iteratoriai su kilpa, bet mes galime judėti tik į priekį, o ne atgal.

Pavyzdys:

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

Išvestis
1 5 3 4 

6. Elementų ištrinimas

Į priekio sąraše mes galime ištrinti elementą nurodytoje padėtyje naudodami ERASE_AFTER () metodas. Šis metodas perkelia iteratorių į vieną padėtį prieš tikslinį elementą. Galima greitai ištrynti iš priekio pop_front () metodas.

nauja python eilutė

Pavyzdys:

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

Išvestis
5 3 

7. Išankstinio sąrašo dydis

„Forward_List“ neturi įmontuoto dydžio () funkcijos. Norėdami rasti jo dydį, turime rankiniu būdu suskaičiuoti elementus, apvažiuodami juos kilpa arba naudojant „STD :: Distance“.

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

Išvestis
Size of forward_list: 4 

8. Tuščias ()

Jis naudojamas patikrinti, ar „Forward_List“ tuščias.
Tai grąžina tiesą, jei sąrašas tuščias ir klaidingas, kitaip leidžia greitai patikrinti, ar konteineris neturi duomenų.

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

Išvestis
The forward_list is empty. The forward_list is not empty. 

Laiko sudėtingumas

Žemiau esančioje lentelėje pateiktas aukščiau pateiktų operacijų laiko sudėtingumas išankstiniame sąraše:

Operacija Laiko sudėtingumas
Prieiga prie pirmo elemento O (1)
Prieiga nThelementas O (n)
Įdėkite į priekį O (1)
Įdėkite po konkrečios padėties O (n)
Ištrinkite pirmąjį elementą O (1)
Ištrinti po konkrečios padėties O (n)
Kelionė O (n)

Persardinimo sąrašas prieš sąrašą

Savybė

apvali matematika java

„Forward_list“

sąrašas

Susieto sąrašo tipas

Atskirai susietas sąrašas

Dvigubai susietas sąrašas

Kelionė

Gali tik eiduoti į priekį

Gali važiuoti tiek į priekį, tiek atgal

Atminties naudojimas

Naudoja mažiau atminties (tik vienas rodyklė kiekviename mazge)

Naudoja daugiau atminties (du rodyklės kiekviename mazge)

Įdėjimas/ištrynimas

Greitas įdėjimas ir ištrynimas, bet tik tam tikroje padėtyje arba po jos

Greitas įterpimas ir ištrynimas bet kur (prieš arba po pozicijos)

Palaikomos funkcijos

gauti ryšį

Ribotas, palyginti su sąrašu (be dydžio () nėra atvirkštinių iteratorių)

Išsamesnė sąsaja, įskaitant dydį () atvirkštinį () dvikryptę iteratoriai.