#include "utils.hpp"
#include <vector>
#include <algorithm> // sort, count, erase
using namespace std;
vector<int> szamok;
//vector<int> szamok = { 3, 5, 1, 4, 2, 2, 5 };
/*
vector – elérhető fontos tagfüggvények:
Konstruktorok / inicializálás:
vector() // üres vektor a size_type annyit jelent, hogy az adott tároló méretet kifejező számtípusa
vector(size_type n) // n darab alapértelmezett elem tehát egy egész típus, ami pozitív számokat tárol, de a pontos típusa a konténertől függ.
vector(size_type n, const T&) // n darab megadott érték A vector (és más STL tárolók) size_type-ja általában size_t,
vector(initializer_list<T>) // lista inicializálás ami egy előjelnélküli egész típus (unsigned).
Kapacitás és méret:
size() // aktuális elemszám
capacity() // lefoglalt kapacitás - Az aktuálisan lefoglalt memória maximum hány elemet tud tárolni újraallokáció nélkül, Dinamikusan változik: növekedhet (pl. push_back után) vagy csökkenhet (shrink_to_fit után).
max_size() // maximális lehetséges elemszám - (platform és memóriafüggő)
empty() // üres-e
reserve(n) // kapacitás lefoglalása
shrink_to_fit() // felesleges kapacitás felszabadítása
Elem-hozzáférés:
at(index) // határellenőrzött elérés
operator[](index) // határellenőrzés nélkül
front() // első elem
back() // utolsó elem
data() // nyers pointer az adatokra
Iterátorok:
begin(), end() // előre irányú iterátorok
rbegin(), rend() // fordított iterátorok - Fordított sorrendű bejáráshoz
cbegin(), cend() // konstans iterátorok - Olyan bejárásnál, ahol nem akarsz módosítani elemeket, csak olvasni
crbegin(), crend() // konstans fordított iterátorok - Az előző kettő kombinációja
Módosító műveletek:
push_back(const T&) // elem hozzáadása a végére
push_back(T&&) // elem mozgatása a végére
emplace_back(args...) // elem helyben konstruálása a végére
pop_back() // utolsó elem eltávolítása
insert(pos, value) // beszúrás pozíció előtt
insert(pos, n, value) // n darab beszúrása
insert(pos, first, last) // tartomány beszúrása
emplace(pos, args...) // helyben konstruálás beszúrásnál
erase(pos) // elem törlése
erase(first, last) // tartomány törlése
clear() // összes elem törlése
resize(n) // méret beállítása
resize(n, value) // méret + feltöltési érték
assign(n, value) // új értékekkel feltöltés
assign(first, last) // tartomány másolása
assign(init_list) // lista másolása
swap(other) // tartalom cseréje másik vektorral
Egyéb:
get_allocator() // allokátor lekérése
*/
void demo_vector() {
szamok.assign({ 3, 5, 1, 4, 2, 2, 5 });
//print_container(szamok, "Eredeti vektor");
// rendezés (random access iterátor kell hozzá)
sort(szamok.begin(), szamok.end());
print_container(szamok, "rendezett vektor");
// elem előfordulásainak számlálása
cout << "a 2-esek száma: " << count(szamok.begin(), szamok.end(), 2) << "\n";
// c++20 erase – törli az összes 5-öst
erase(szamok, 5);
print_container(szamok, "az 5-ösök törlése után");
// új elem hozzáadása a végére
szamok.push_back(10);
print_container(szamok, "10 hozzáadva a végére");
}