std::vector (tsz. std::vectors)
std::vector
a C++ Standard Library egyik legfontosabb adatszerkezete, amely dinamikus tömbként működik. Rugalmasan kezeli a memóriafoglalást, és számos beépített függvényt biztosít az adatok kezelésére.
A std::vector
az egyik leggyakrabban használt konténer a C++ STL (Standard Template Library) részeként. Fő előnye, hogy dinamikusan kezeli a méretét, vagyis az elemek hozzáadásakor és törlésekor automatikusan újraallokálja a memóriát.
vector
képes önállóan megnövelni a méretét.O(1)
időben történik.vector
automatikusan lefoglal és felszabadít memóriát.
A std::vector
használatához be kell inkludálni az <vector>
fejléccsapot.
#include <iostream>
#include <vector>
int main() {
std::vector<int> v1; // Üres vektor
std::vector<int> v2(5); // 5 elemű vektor (mind 0-ra inicializálva)
std::vector<int> v3(5, 10); // 5 elemű vektor, minden elem 10
std::vector<int> v4 = {1, 2, 3, 4, 5}; // Inicializáló listával
return 0;
}
A std::vector
egyik legnagyobb előnye, hogy dinamikusan bővíthető az push_back()
és emplace_back()
függvényekkel.
std::vector<int> v;
v.push_back(10); // Hozzáad egy elemet a végéhez
v.push_back(20);
v.emplace_back(30); // Hatékonyabb beillesztés (közvetlenül létrehozza az elemet)
Elem törlése:
v.pop_back(); // Utolsó elem eltávolítása
v.erase(v.begin()); // Első elem törlése
v.clear(); // Összes elem törlése
Az elemek közvetlen elérése történhet indexeléssel vagy iterátorokkal.
std::vector<int> v = {10, 20, 30};
std::cout << v << std::endl; // Kiírja: 20
std::cout << v.at(2) << std::endl; // Biztonságosabb, mert ellenőrzi a határokat
A v.at(index)
függvény kivételt dob, ha a megadott index érvénytelen.
std::vector<int> v = {10, 20, 30};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}
C++11 óta a range-based for loop is használható:
for (int x : v) {
std::cout << x << " ";
}
A vektor mérete és kapacitása dinamikusan változhat.
std::vector<int> v = {1, 2, 3};
std::cout << "Méret: " << v.size() << std::endl;
std::cout << "Kapacitás: " << v.capacity() << std::endl;
Hasznos metódusok: - size()
: Az aktuális elemek számát adja vissza. - capacity()
: A vektor által lefoglalt memóriaterület méretét adja meg. - resize(n)
: A vektor méretét n-re állítja. - reserve(n)
: Legalább n kapacitást foglal előre. - shrink_to_fit()
: Felszabadítja a felesleges memóriát.
A std::vector
támogatja az összetettebb műveleteket is, például a beszúrást, másolást és rendezést.
std::vector<int> v = {10, 20, 30};
v.insert(v.begin() + 1, 15); // 15 beszúrása a 2. helyre
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2); // 3-as törlése
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = v1; // Másolat
std::vector<int> v3 = std::move(v1); // v1 tartalmát átköltözteti v3-ba
std::vector<int> v = {5, 2, 8, 1, 3};
std::sort(v.begin(), v.end()); // Növekvő sorrend
A std::vector
hatékony, de a következőkre figyelni kell: - Automatikus átméretezés: Ha a kapacitás elfogy, a vektor új memóriaterületet foglal (általában 2x-es növekedéssel). - Mozgatás vs másolás: A std::move()
használatával elkerülhetők a felesleges másolások. - Előre foglalás: Ha tudjuk a várt elemmennyiséget, érdemes reserve()
-et használni a memóriahatékonyság javítása érdekében.
std::vector
-t?O(1)
művelet.O(1)
időben.
std::array
: Ha a méret fix.std::deque
: Ha az elejére és végére is gyors beszúrás kell.std::list
: Ha gyakran kell középre beszúrni.
A std::vector
az egyik leghatékonyabb és legkönnyebben használható STL konténer. Fő előnyei: ✅ Dinamikusan méretezhető
✅ Hatékony memóriahasználat
✅ Gyors indexelés
✅ Gazdag STL támogatás
Ezzel az eszközzel hatékony és könnyen kezelhető adatszerkezetet kapunk, amely szinte minden programozási helyzetben hasznos lehet. 🚀