std::vector
Főnév
std::vector (tsz. std::vectors)
- (informatika) A
std::vectora 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.
1. Bevezetés
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.
Főbb tulajdonságai:
- Folytonos memória: Az elemek egy tömbben helyezkednek el.
- Automatikus méretkezelés: Új elemek hozzáadásakor a
vectorképes önállóan megnövelni a méretét. - Hatékony indexelés: Az elemek közvetlen elérése gyors, mert
O(1)időben történik. - Rugalmas memóriahasználat: A
vectorautomatikusan lefoglal és felszabadít memóriát. - STL-kompatibilitás: Könnyen használható az STL más komponenseivel.
2. Alapvető használat
A std::vector használatához be kell inkludálni az <vector> fejléccsapot.
Deklaráció és inicializálás
#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;
}
Elemek hozzáadása és törlése
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
3. Elérés és módosítás
Az elemek közvetlen elérése történhet indexeléssel vagy iterátorokkal.
Index alapú hozzáférés
std::vector<int> v = {10, 20, 30};
std::cout << v[1] << 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.
Iterátorok használata
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 << " ";
}
4. Méret és kapacitás kezelése
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.
5. Haladó funkciók
A std::vector támogatja az összetettebb műveleteket is, például a beszúrást, másolást és rendezést.
Elem beszúrása tetszőleges helyre
std::vector<int> v = {10, 20, 30};
v.insert(v.begin() + 1, 15); // 15 beszúrása a 2. helyre
Elemek cseréje és törlése
std::vector<int> v = {1, 2, 3, 4, 5};
v.erase(v.begin() + 2); // 3-as törlése
Vektorok másolása és mozgatása
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
Rendezés
std::vector<int> v = {5, 2, 8, 1, 3};
std::sort(v.begin(), v.end()); // Növekvő sorrend
6. Teljesítmény és memóriahatékonyság
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.
7. Mikor használjunk std::vector-t?
- Ha dinamikus tömbre van szükség, amely változó méretű.
- Ha gyakran kell elemeket hozzáadni a végéhez, mert ez
O(1)művelet. - Ha gyors, véletlenszerű hozzáférés kell
O(1)időben. - Ha STL algoritmusokat szeretnénk használni a konténeren.
Alternatívák:
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.
Összegzés
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. 🚀
- std::vector - Szótár.net (en-hu)
- std::vector - Sztaki (en-hu)
- std::vector - Merriam–Webster
- std::vector - Cambridge
- std::vector - WordNet
- std::vector - Яндекс (en-ru)
- std::vector - Google (en-hu)
- std::vector - Wikidata
- std::vector - Wikipédia (angol)