Forward_list kontajner poskytuje implementáciu jednotlivo prepojený zoznam Štruktúra údajov. Ukladá údaje do neúmyselnej pamäte, kde každý prvok poukazuje na ďalší prvok v sekvencii. Vďaka tomu je vloženie a vymazanie rýchlejšie, keď je známa poloha prvku.
Syntax
Zoznam vpred je definovaný ako Std :: Forward_list Šablóna triedy vo vnútri< Forward_list > Súbor hlavičky.
Forward_list
fl;
kdekoľvek
- T: Dátový typ prvkov v zozname Forward.
- F: Názov priradený do zoznamu Forward.
Vyhlásenie
Forward_list je možné deklarovať a inicializovať niekoľkými spôsobmi, ako je uvedené v nižšie uvedenom príklade:
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; }
Výstup
4 4 4 1 5 3 4
Príklad: Vo vyššie uvedenom programe sme jednoduchý inicializovaný zoznam vpred tromi spôsobmi:
- Vyhlásenie Forward_list
Fl1 Vytvorí prázdny zoznam vpred celé čísla. - Vyhlásenie Forward_list
FL2 (34) Vytvorí predný zoznam veľkosti 3 a každý prvok je 4. - Vyhlásenie Forward_list
fl3 = {1 5 3 4} Vytvorí zoznam vpred a inicializuje sa s prvkami, ktorý je uvedený v zozname inicializátor.
Základné operácie
Tu sú základné operácie, ktoré môžeme vykonať v zozname Forward:
1. Prístup k prvkom
K prvkom Forward List nie je možné pristupovať pomocou indexov, ako sú polia alebo vektory. Zoznam musíme prejsť postupne od začiatku do požadovanej polohy, aby sme k nemu získali prístup. To sa dá dosiahnuť zvýšením začať () iterátor, ale je lepšie používať Next () alebo Advance () funkcia.
K prvému prvku zoznamu je však možné ľahko získať prístup predný () metóda.
Príklad:
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; }
Výstup
1 3
Príklad: Vo vyššie uvedenom programe je prvý prvok vytlačený pomocou použitia predný () metóda. Ak chcete získať prístup k tretiemu prvku Next () sa používa na presun iterátora dve pozície od začiatku a * sa používa na dereferenciu iterátora.
2. Vkladanie prvkov
Prvky môžu byť vložené do zoznamu vpred pomocou insert_after () funkcia. Vyžaduje iterátor, po ktorom sa má prvok vložiť. Avšak rýchle vloženie na fronte je podporované push_front () metóda.
Príklad:
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; }
Výstup
1 5 3 4
Vysvetlenie: V tomto programe sa prvý prvok Forward_list vkladá vpredu pomocou push_front () funkcia. Potom je vytvorený iterátor a posunie jednu pozíciu vpred pomocou Advance () funkcia. Potom prvok 5 sa vkladá po druhom prvku pomocou insert_after () funkcia.
3. Aktualizácia prvkov
Hodnota existujúcich prvkov je možné zmeniť jednoducho prístupom k nim a používaním prevádzkovateľ prideľovania priradiť novú hodnotu.
Príklad:
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; }
Výstup
111 333
4. Nájdenie prvku
Zoznam vpred neposkytuje žiadnu funkciu člena na vyhľadávanie prvku, ale môžeme použiť find () Algoritmus na nájdenie akejkoľvek danej hodnoty.
Príklad :
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; }
Výstup
3
5. Prechodovanie
Zoznam vpred je možné prejsť pomocou začať () a koniec () Iterátori s slučkou, ale môžeme sa pohnúť vpred a nie dozadu.
Príklad:
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; }
Výstup
1 5 3 4
6. Vymazanie prvkov
V zozname Forward môžeme prvok odstrániť v danej pozícii pomocou erase_after () metóda. Táto metóda posúva iterátor do jednej polohy pred cieľovým prvkom. Rýchle vymazanie spredu je možné pomocou pop_front () metóda.
Príklad:
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; }
Výstup
5 3
7. Veľkosť zoznamu vpred
Forward_list nemá funkciu vstavanej veľkosti (). Aby sme našli jeho veľkosť, musíme manuálne spočítať prvky tým, že ich prejdeme slučkou alebo pomocou vzdialenosti STD ::.
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; }
Výstup
Size of forward_list: 4
8. prázdny ()
Používa sa na kontrolu, či je Forward_list prázdny.
Vráti true, ak je zoznam prázdny a nepravdivý, inak umožňuje rýchlo overiť, či kontajner nemá žiadne údaje.
#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; }
Výstup
The forward_list is empty. The forward_list is not empty.
Zložitosť
Nižšie uvedená tabuľka uvádza časovú zložitosť vyššie uvedených operácií v zozname Forward:
| Činnosť | Zložitosť |
|---|---|
| Prístup k prvému prvku | O (1) |
| Prístup nthprvok | O (n) |
| Vložiť vpredu | O (1) |
| Vložte po konkrétnej polohe | O (n) |
| Vymazať prvý prvok | O (1) |
| Odstráňte po konkrétnej polohe | O (n) |
| Priechod | O (n) |
Zoznam vs.
Funkcia | Forward_list | zoznam |
|---|---|---|
Typ prepojeného zoznamu | Jednotlivo prepojený zoznam | Dvojnásobne prepojený zoznam reťazec java obsahuje |
Priechod | Môže prechádzať iba vpred | Môže prechádzať dopredu aj dozadu |
Využitie pamäte | Používa menej pamäte (iba jeden ukazovateľ na uzol) | Používa viac pamäte (dva ukazovatele na uzol) |
Vloženie/vymazanie | Rýchle vloženie a vymazanie, ale iba na alebo po danej polohe | Rýchle vloženie a vymazanie kdekoľvek (pred alebo po pozícii) |
Podporované funkcie | V porovnaní so zoznamom (bez veľkosti () žiadne opakované iterátory) | Kompletnejšie rozhranie vrátane obojsmerných iterátorov s veľkosťou () reverznej (). |
| | |