std::vector

Üdvözlöm, Ön a std::vector szó jelentését keresi. A DICTIOUS-ban nem csak a std::vector szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a std::vector szót egyes és többes számban mondani. Minden, amit a std::vector szóról tudni kell, itt található. A std::vector szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Astd::vector és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

std::vector (tsz. std::vectors)

  1. (informatika) A 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.



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 vector ké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 vector automatikusan 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 << 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. 🚀