#include "utils.hpp"
#include <deque>
#include <algorithm> // reverse, max_element
using namespace std;
/*
deque – elérhető fontos tagfüggvények (két végén bővíthető sor, random access iterátorokkal):
Konstruktorok / inicializálás:
deque()
deque(size_type n)
deque(size_type n, const T& value)
deque(initializer_list<T>)
deque(first, last)
Kapacitás és méret:
size()
empty()
max_size()
shrink_to_fit() // javaslat a felesleges kapacitás leépítésére
// NINCS capacity(), reserve() a deque-nél
Elem-hozzáférés:
at(index) // határellenőrzött
operator[](index) // határellenőrzés nélkül
front()
back()
Iterátorok:
begin(), end()
rbegin(), rend()
cbegin(), cend()
crbegin(), crend()
Módosító műveletek:
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...)
erase(pos) / erase(first, last)
clear()
resize(n) / resize(n, value)
assign(n, value) / assign(first, last) / assign(init_list)
swap(other)
Megjegyzések:
- Random access iterátor → működik rajta pl. std::sort, std::reverse.
- Memória nem egybefüggő blokkokban tárolódik.
*/
void demo_deque() {
deque<int> d = { 10, 20, 30 };
d.push_front(5);
d.push_back(40);
print_container(d, "Deque tartalma");
// Fordítás
reverse(d.begin(), d.end());
print_container(d, "Fordított deque");
// Legnagyobb elem
auto max_it = max_element(d.begin(), d.end());
cout << "Legnagyobb elem: " << *max_it << "\n";
// Első elem eltávolítása
d.pop_front();
print_container(d, "Első elem eltávolítása után");
}