#include "utils.hpp"
#include <list>
#include <algorithm> // find
using namespace std;
/*
list – elérhető fontos tagfüggvények (kétirányú láncolt lista):
Konstruktorok / inicializálás:
list()
list(size_type n) // n darab alapértelmezett elem
list(size_type n, const T& value) // n darab megadott érték
list(initializer_list<T>) // lista inicializálás
list(first, last) // tartományból
Kapacitás és méret:
size() // aktuális elemszám
empty() // üres-e
max_size() // elméleti maximum elemszám
Elem-hozzáférés:
front() // első elem
back() // utolsó elem
// NINCS operator[] / at() (nincs random hozzáférés)
Iterátorok:
begin(), end()
rbegin(), rend()
cbegin(), cend()
crbegin(), crend()
Módosító műveletek (általános):
push_front(const T&), push_front(T&&)
push_back(const T&), push_back(T&&)
emplace_front(args...), emplace_back(args...)
pop_front(), pop_back()
insert(pos, value) / insert(pos, n, value) / insert(pos, first, last) / insert(pos, init_list)
emplace(pos, args...) // helyben konstruál
erase(pos) / erase(first, last)
clear()
resize(n) / resize(n, value)
assign(n, value) / assign(first, last) / assign(init_list)
swap(other)
List-specifikus műveletek (csomópont-szintű, O(1) mozgatások):
splice(pos, other) // 'other' teljes tartalmát átemeli
splice(pos, other, it) // egy elem átemelése
splice(pos, other, first, last) // tartomány átemelése
remove(const T& value) // érték szerint töröl (végigiterál)
remove_if(pred) // predikátum szerint töröl
unique() / unique(bin_pred) // egymás melletti duplikátumok törlése
sort() / sort(comp) // belső stabil rendezés (nem <algorithm>)
merge(other) / merge(other, comp) // két RENDEZETT lista egyesítése
reverse() // megfordítás
Megjegyzések:
- splice/merge O(1) csomópontmozgatás (nincs másolás/újraallokáció).
*/
void demo_list() {
list<string> nevek = { "Anna", "Bela", "Cecil" };
nevek.push_front("David");
nevek.push_back("Edit");
print_container(nevek, "Lista kezdeti tartalma");
// Beszúrás "Cecil" elé
auto it = find(nevek.begin(), nevek.end(), "Cecil");
if (it != nevek.end()) nevek.insert(it, "Gabor");
print_container(nevek, "Gabor beszúrva 'Cecil' elé");
// Törlés érték alapján
nevek.remove("Anna");
print_container(nevek, "Anna törlése után");
// Saját list::sort() metódus (nem az <algorithm>-ból)
nevek.sort();
print_container(nevek, "Rendezett lista");
cout << "A lista hossza: " << nevek.size() << "\n";
}