„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ų.
#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. |
| | |