std::list (tsz. std::lists)
std::list
a C++ Standard Template Library (STL) egyik konténere, amely kettős láncolt listát valósít meg. Minden elem külön memóriablokkban van eltárolva, és minden elem tartalmaz:NULL <- <-> <-> -> NULL
std::vector
-ral).list
nem lehetséges).
#include <list>
std::list<int> myList;
myList.push_back(10); // hozzáad hátulra
myList.push_front(5); // hozzáad előre
myList.pop_back(); // utolsó elem törlése
myList.pop_front(); // első elem törlése
for (auto it = myList.begin(); it != myList.end(); ++it) {
std::cout << *it << " ";
}
vagy modern C++:
for (int value : myList) {
std::cout << value << " ";
}
Metódus | Funkció |
---|---|
push_back(value)
|
Hozzáadás a lista végére |
push_front(value)
|
Hozzáadás az elejére |
pop_back()
|
Utolsó elem törlése |
pop_front()
|
Első elem törlése |
insert(pos, value)
|
Elem beszúrása a pozíció előtt |
erase(pos)
|
Adott pozíciójú elem törlése |
size()
|
Lista mérete |
empty()
|
Üres-e a lista? |
clear()
|
Összes elem törlése |
reverse()
|
Lista megfordítása |
sort()
|
Rendezés (csak ha az elemek összehasonlíthatók) |
unique()
|
Egymást követő duplikált elemek törlése |
remove(value)
|
Minden előfordulás törlése |
Az std::list
teljesen támogatja az STL iterátor modellt:
begin()
→ az első elemre mutató iteratorend()
→ a lista végét jelző iterator (utolsó elem után)További típusok:
rbegin()
/ rend()
→ fordított irányú iterátorok (reverse iterátorok)cbegin()
/ cend()
→ konstans iterátorok (nem lehet velük módosítani az elemeket)
#include <iostream>
#include <list>
int main() {
std::list<int> numbers = {3, 1, 4, 1, 5, 9};
numbers.push_front(2);
numbers.push_back(6);
std::cout << "List elements: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << "\n";
numbers.sort();
std::cout << "Sorted list: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << "\n";
numbers.unique(); // Duplikáltak törlése
std::cout << "Unique list: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << "\n";
return 0;
}
reverse()
) és rendezés (sort()
)
list
-öt írni → O(n) idő, ha keresni akarszvector
O(1) indexelésével)
std::list
-et?Használható, ha:
Ne használd, ha:
std::vector
-t).
Jellemző | std::list | std::vector |
---|---|---|
Véletlenszerű hozzáférés | Lassú (O(n)) | Gyors (O(1)) |
Beszúrás/törlés középen | Gyors (O(1), ha iterátor adott) | Lassú (O(n)) |
Memóriakezelés | Lassabb, több pointer | Cache-barát, tömbalapú |
Iterátor stabilitás | Magas | Csak bizonyos esetekben stabil |
FIFO / LIFO | Nagyon jó | Lehetséges, de nem optimális |
std::list
egy kettős láncolt lista implementációja a C++ STL-ben.std::vector
jobb választás, de az std::list
-nek megvannak a maga speciális helyei.Aranyszabály: 👉 Ha szekvenciális feldolgozás és gyakori szerkesztés kell → std::list
👉 Ha gyors hozzáférés index alapján kell → std::vector