Előremeneti_list A Container biztosítja a Egyedül összekapcsolt lista adatszerkezet. Az adatokat nem kötött memóriában tárolja, ahol az egyes elemek a sorrend következő elemére mutatnak. Ez gyorsabbá teszi a beillesztést és a törlést, ha az elem helyzete ismert.
Szintaxis
Az előremenő lista meghatározva van STD :: Forward_list osztálysablon a< előremeneti_list > fejlécfájl.
előremeneti_list
Fl; Rubina Dilaik színésznő
ahol
- T: Az elemek adattípusa az előző listában.
- F: Az előző listához rendelt név.
Nyilatkozat és inicializálás
A Forward_list többféle módon deklarálható és inicializálható, az alábbi példában látható módon:
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; }
Kibocsátás
4 4 4 1 5 3 4
Példa: A fenti programban háromféle módon egyszerűen inicializált előrejelző lista:
- Nyilatkozat előremeneti_list
Fl1 Készít egy üres előremenő számot az egész számokról. - Nyilatkozat előremeneti_list
FL2 (34) Készít egy előretekintési listát a 3. méretről, és mindegyik elem 4. - Nyilatkozat előremeneti_list
fl3 = {1 5 3 4} Készít egy előretekintő listát, és inicializálja az elemekkel az inicializáló listát.
Alapvető műveletek
Itt vannak az alapvető műveletek, amelyeket az előremenő listán végezhetünk:
1. Hozzáférés az elemekhez
Az előremenő lista elemei nem érhetők el olyan indexekkel, mint tömbök vagy vektorok. A hozzáféréshez a kezdetektől kezdve át kell mennünk a listán. Ezt megteheti a növekedéssel kezdődik() iterator, de jobb használni következő() vagy előleg() funkció.
A lista első eleme azonban könnyen hozzáférhető elülső() módszer.
Példa:
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; }
Kibocsátás
1 3
Példa: A fenti programban az első elemet a használatával nyomtatják ki elülső() módszer. A harmadik elem eléréséhez következő() az iterátor két pozíciójának elejétől és a kezdetektől és *azt az iterátor megsemmisítésére használják.
2.
Az elemek beilleszthetők az előremeneti listába insert_after () funkció. Ez megköveteli azt az iterátort, amely után az elemet be kell helyezni. Bármennyire a fronton a gyors beillesztést támasztja alá push_front () módszer.
Példa:
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; }
Kibocsátás
1 5 3 4
Magyarázat: Ebben a programba a Forward_list első eleme a push_front () funkció. Ezután létrehozzák egy iterátort, és egy pozíciót előre mozgatnak a előleg() funkció. Ezután az elem 5 a második elem után behelyezik a insert_after () funkció.
3. Az elemek frissítése
A meglévő elemek értéke egyszerűen megváltoztatható a hozzáféréssel és a használatával megbízó üzemeltető az új érték hozzárendeléséhez.
Példa:
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; }
Kibocsátás
111 333
4. Elem megtalálása
Az előrejelző lista nem biztosít semmilyen tag funkciót egy elem kereséséhez, de használhatjuk a lelet() algoritmus az adott érték megtalálásához.
Példa :
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; }
Kibocsátás
3
5. Traversing
Az előremenő lista áthaladhat a használatával kezdődik() és vége () iterátorok hurokkal, de csak előrehaladhatunk, és nem hátra.
Példa:
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; }
Kibocsátás
1 5 3 4
6. Az elemek törlése
Az előző listában törölhetjük az elemet az adott helyzetben ERASE_AFTER () módszer. Ez a módszer az iterátort egy helyzetbe hozza a cél elem előtt. A gyors törlés az elülső oldalról lehetséges pop_front () módszer.
singleton design minta java
Példa:
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; }
Kibocsátás
5 3
7. Az előrejelző lista mérete
A FORRED_LIST nem rendelkezik beépített méret () funkcióval. A méretének megtalálásához manuálisan kell számolnunk az elemeket úgy, hogy áthaladunk egy hurokkal vagy STD :: távolság használatával.
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; }
Kibocsátás
Size of forward_list: 4
8. Üres ()
Arra használják, hogy ellenőrizze, hogy a Forward_list üres -e.
Igaz, ha a lista üres és hamis, egyébként lehetővé teszi, hogy gyorsan ellenőrizze, hogy a konténernek nincs -e adat.
#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; }
Kibocsátás
The forward_list is empty. The forward_list is not empty.
Idő bonyolultság
Az alábbi táblázat felsorolja a fenti műveletek időbeli bonyolultságát az előrejelző listán:
| Művelet | Idő bonyolultság |
|---|---|
| Hozzáférés az első elemhez | O (1) |
| Hozzáférés nTHelem | On) |
| Helyezze el az elejét | O (1) |
| Helyezze be meghatározott helyzet után | On) |
| Az első elem törlése | O (1) |
| Törlés meghatározott helyzet után | On) |
| Átjáró | On) |
Forward List VS Lista
Jellemző | előremeneti_list | lista |
|---|---|---|
A kapcsolódó lista típusa | Egyedül összekapcsolt lista | Kétszeresen összekapcsolt lista |
Átjáró | Csak előrehaladhat harald baldr | Átjárhat mind előre, mind hátra |
Memóriahasználat | Kevesebb memóriát használ (csomópontonként csak egy mutatót) | Több memóriát használ (csomópontonként két mutatót) |
Beillesztés/törlés | Gyors beillesztés és törlés, de csak egy adott helyzetben vagy után | Gyors beillesztés és törlés bárhol (egy pozíció előtt vagy után) |
Támogatott funkciók | Korlátozott a listához képest (nincs méret () nincs fordított iterátor) | Teljesebb interfész, beleértve a méret () fordított () kétirányú iterátorokat. |
| | |