std::loend sisse C++ koos Näitega
⚡ Nutikas kokkuvõte
std::loend sisse C++ on kahekordselt lingitud loendina teostatud järjestuskonteiner, mis võimaldab kiiret sisestamist ja kustutamist mis tahes positsioonil, salvestades samal ajal elemente mittekülgnevas mälus ja toetades kahesuunalist järjestikust juurdepääsu juhusliku juurdepääsu asemel.

Mis on std::list?
In C++, std::list viitab salvestuskonteinerile. Std::list võimaldab teil üksusi lisada ja eemaldada kõikjalt. Std::list on rakendatud kahekordselt lingitud loendina. See tähendab, et loendiandmetele saab juurde pääseda kahesuunaliselt ja järjestikku.
Standardmallide teegi loend ei toeta kiiret juhuslikku juurdepääsu, kuid see toetab järjestikust juurdepääsu igast suunast.
Saate loendielemente erinevatesse mälutükkidesse hajutada. Andmetele järjestikuseks juurdepääsuks vajalik teave salvestatakse konteinerisse. Std::loend võib käitamise ajal vajaduse korral mõlemast otsast laieneda ja kahaneda. Sisemine jaotur täidab automaatselt salvestusnõuded.
Need omadused tekitavad praktilise küsimuse: millal peaksite tegelikult nimekirja järele haarama?
Miks kasutada std::list?
Siin on std::list kasutamise põhjused:
- std::list toimib paremini võrreldes teiste järjestuskonteineritega, näiteks massiivi ja vektoriga.
- Neil on parem jõudlus sisestamisel, liigutamisel ja väljutamiseltracelementide liigutamine mis tahes asendist.
- Std::list saab paremini hakkama ka algoritmidega, mis selliseid toiminguid intensiivselt sooritavad.
Kui põhjused on selged, on järgmine samm süntaks, mis neid deklareerib.
Loendi süntaks
Std::listi määratlemiseks peame importima päisefail. Siin on std::list definitsiooni süntaks:
template < class Type, class Alloc =allocator<T> > class list;
Siin on ülaltoodud parameetrite kirjeldus:
- T – Määrab sisalduva elemendi tüübi. T saab asendada mis tahes andmetüübiga, isegi kasutaja määratletud tüüpidega.
- Alloc – Määrab eraldajaobjekti tüübi. See kasutab vaikimisi eraldajaklassi malli. See on väärtuspõhine ja kasutab lihtsat mälu eraldamise mudelit.
Näiteks 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
Väljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Lisage selle funktsioonide kasutamiseks algoritmi päisefail.
- Selle funktsioonide kasutamiseks lisage iostreami päisefail.
- Lisage selle funktsioonide kasutamiseks loendi päise fail.
- Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
- Looge loend nimega minu_loend 4 täisarvuga.
- Kasutama silmuse jaoks tsüklimuutuja x loomiseks. Seda muutujat kasutatakse loendi elementide läbimiseks.
- Printige välja loendi väärtused konsoolil.
- For-silmuse keha lõpp.
- Funktsiooni main() keha lõpp.
C++ Funktsioonide loend
Siin on levinumad std::list funktsioonid:
| funktsioon | Kirjeldus |
|---|---|
| sisesta () | See funktsioon lisab uue elemendi enne positsiooni, mille iteraator osutab. |
| push_back() | See funktsioon lisab loendi lõppu uue üksuse. |
| push_front() | See lisab loendi esiossa uue üksuse. |
| pop_front() | See kustutab loendi esimese üksuse. |
| suurus () | See funktsioon määrab loendi elementide arvu. |
| ees() | Määrab loendi esimesed üksused. |
| tagasi () | Määrab loendi viimase üksuse. |
| tagurpidi() | See pöörab loendi üksused ümber. |
| ühenda() | See ühendab kaks sorteeritud loendit. |
Konstruktorid
Siin on nimekiri funktsioonid pakutud päisefail:
- Vaikekonstruktor std::list::list()- See loob tühja loendi, mis sisaldab null elemente.
- Täida konstruktor std::list::list()- See loob loendi n elemendiga ja määrab igale elemendile väärtuse null (0).
- Vahemiku konstruktor std::list::list()- loob loendi paljude elementidega vahemikus esimesest viimaseni.
- Kopeeri konstruktor std::list::list()- See loob loendi kõigi olemasolevas loendis sisalduvate elementide koopiatega.
- Move constructor std::list::list()- loob teisaldamise semantika abil loendi teise loendi elementidega.
- Initsialiseerija loendi konstruktor std::list::list()-see loob teise loendi elementidega loendi, kasutades liigutamise semantikat.
Näiteks 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> l3(move(l1)); cout << "Size of list l: " << l.size() << endl; cout << "List l2 contents: " << endl; for (auto it = l2.begin(); it != l2.end(); ++it) cout << *it << endl; cout << "List l3 contents: " << endl; for (auto it = l3.begin(); it != l3.end(); ++it) cout << *it << endl; return 0; }
Väljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Selle funktsioonide kasutamiseks lisage iostreami päisefail.
- Lisage selle funktsioonide kasutamiseks loendi päise fail.
- Lisage koodi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
- Looge tühi loend nimega l.
- Looge 1 täisarvuga loend nimega l3.
- Looge loend nimega l2 koos kõigi loendi l1 elementidega algusest lõpuni.
- Looge liigutamise semantika abil loend nimega l3. Loendil l3 on sama sisu kui loendil l2.
- Printige konsoolil koos muu tekstiga loendi l suurus.
- Printige konsoolile teksti.
- Looge iteraator nimega see ja kasutage seda loendi l2 elementide itereerimiseks.
- Printige konsoolile loendi elemendid nimega l2.
- Printige konsoolile teksti.
- Looge iteraator nimega see ja kasutage seda loendi l3 elementide itereerimiseks.
- Printige konsoolile loendi elemendid nimega l3.
- Programm peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() keha lõpp.
Konteinerite omadused
Siin on konteineri atribuutide loend:
| vara | Kirjeldus |
|---|---|
| Jada | Järjestuskonteinerid järjestavad oma elemendid ranges lineaarses järjestuses. Elementidele pääseb juurde nende asukoha järgi järjestuses. |
| Topeltlingitud loend | Igal elemendil on teave eelmiste ja järgmiste elementide leidmise kohta. See võimaldab sisestamis- ja kustutamistoiminguteks pidevalt aega. |
| Jaotaja-teadlik | Jaotajaobjekti kasutatakse salvestusmahu dünaamiliseks muutmiseks. |
Sisestamine loendisse
Väärtuste loendisse lisamiseks on erinevaid funktsioone, mida saame kasutada. Vaatame seda:
Näiteks 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; my_list.push_front(11); my_list.push_back(18); auto it = std::find(my_list.begin(), my_list.end(), 10); if (it != my_list.end()) { my_list.insert(it, 21); } for (int x : my_list) { std::cout << x << '\n'; } }
Väljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Lisage selle funktsioonide kasutamiseks algoritmi päisefail.
- Selle funktsioonide kasutamiseks lisage iostreami päisefail.
- Lisage selle funktsioonide kasutamiseks loendi päise fail.
- Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
- Looge loend nimega minu_loend 4 täisarvuga.
- Sisestage element 11 loendi nimega minu_loend ette.
- Sisestage element 18 loendi nimega minu_loend lõppu.
- Looge see iteraator ja kasutage seda elemendi 10 leidmiseks loendist my_list.
- Kasutage if-lauset, et teha kindlaks, kas ülaltoodud element leiti või mitte.
- Sisestage element 21 enne ülaltoodud elementi, kui see leiti.
- Kui-lause põhiosa lõpp.
- Kasutage tsüklit for tsüklimuutuja x loomiseks. Seda muutujat kasutatakse loendielementide kordamiseks.
- Printige välja loendi väärtused konsoolil.
- For silmuse keha lõpp.
- Funktsiooni main() keha lõpp.
Loendisse lisatud elemente saab sama hästi ka välja võtta.
Loendist kustutamine
Loendist on võimalik üksusi kustutada. Funktsioon erase() võimaldab teil loendist ühe või mitme üksuse kustutada.
- Ühe üksuse kustutamiseks edastage lihtsalt üks täisarvu positsioon. Üksus kustutatakse.
- Vahemiku kustutamiseks tuleb läbida algus- ja lõpp-iteraatorid. Vaatame seda demonstreerima.
Näiteks 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::iterator i = my_list.begin(); my_list.erase(i); cout << "\nList elements after deletion: "; for (int x : my_list) { std::cout << x << '\n'; } return 0; }
Väljund:
Siin on koodi ekraanipilt:
Code Selgitus:
- Lisage selle funktsioonide kasutamiseks algoritmi päisefail.
- Selle funktsioonide kasutamiseks lisage iostreami päisefail.
- Lisage selle funktsioonide kasutamiseks loendi päise fail.
- Lisage meie programmi std nimeruum, et kasutada selle klasse ilma seda kutsumata.
- Kutsuge funktsioon main(). Programmi loogika tuleks lisada selle funktsiooni kehasse.
- Looge loend nimega minu_loend 4 täisarvuga.
- Printige konsoolile teksti.
- Kasutage tsüklit for tsüklimuutuja x loomiseks. Seda muutujat kasutatakse loendielementide kordamiseks.
- Printige välja loendi väärtused konsoolil.
- For-silmuse keha lõpp.
- Loo iteraator i, mis osutab loendi esimesele elemendile.
- Kasutage iteraatori i juhitud funktsiooni erase().
- Printige konsoolile teksti.
- Kasutage tsüklit for tsüklimuutuja x loomiseks. Seda muutujat kasutatakse loendielementide kordamiseks.
- Printige välja loendi väärtused konsoolil. See tuleb pärast kustutamist.
- For-silmuse keha lõpp.
- Programm peab pärast edukat lõpetamist tagastama väärtuse.
- Funktsiooni main() keha lõpp.






