Ce face std::vector::operator[]
v[i] returnează o referință la elementul de pe poziția i, numărând de la 0. Poți citi valoarea sau o poți schimba (v[i] = 3;). Este cel mai rapid mod de acces, pentru că nu face nicio verificare.
Responsabilitatea este a ta: i trebuie să fie între 0 și size() - 1. O poziție în afara vectorului este comportament nedefinit: programul nu primește o eroare clară, ci poate afișa gunoi, poate strica alte date sau se poate opri. Dacă nu ești sigur de poziție, folosește at().
Spre deosebire de std::map, la vector operator[] nu adaugă elemente. Ca să adaugi, folosește push_back sau resize.
Parametri
| Parametru | Descriere |
|---|---|
pozitie |
Indicele elementului, de la 0 la size() - 1. |
Ce returnează
O referință la element (sau o referință const, pentru un vector constant).
Exemple
Exemplul 1: Citire și scriere cu indice
#include <print>
#include <vector>
int main() {
std::vector<int> stoc{12, 0, 7};
std::println("Primul produs: {} bucăți", stoc[0]);
stoc[1] = 25; // am primit marfă
stoc[2] -= 2; // am vândut 2
std::println("Stoc: {}", stoc);
}
Rezultat
Primul produs: 12 bucăți
Stoc: [12, 25, 5]
Exemplul 2: Elemente vecine
Bucla pornește de la 1, ca v[i - 1] să fie mereu o poziție validă.
#include <print>
#include <vector>
int main() {
std::vector<int> pret{100, 104, 101, 110};
for (std::size_t i = 1; i < pret.size(); ++i) {
std::println("Ziua {}: {:+} lei", i + 1, pret[i] - pret[i - 1]);
}
}
Rezultat
Ziua 2: +4 lei
Ziua 3: -3 lei
Ziua 4: +9 lei
Greșeli frecvente
- Scrii
v[v.size()]pentru „ultimul element”. Ultimul estev[v.size() - 1]sauv.back();v[v.size()]este deja în afara vectorului (comportament nedefinit). - Declari un vector gol și scrii
v[0] = 5;, crezând că elementul se creează. Nu se creează: vectorul are 0 elemente. Foloseștepush_back(5)sau creează vectorul cu dimensiune:std::vector<int> v(10);. - Cauți erori de poziție doar cu ochiul. Compilează în timpul dezvoltării cu verificări (de exemplu
-D_GLIBCXX_DEBUGla GCC sau modul „hardened” al libc++) sau cu-fsanitize=address, care prind accesul în afara vectorului.
Comenzi înrudite
std::vector::at: Returnează elementul de la o poziție, cu verificare: aruncă std::out_of_range dacă poziția nu există.std::vector::size: size() spune câte elemente are vectorul; empty() spune dacă nu are niciunul.std::vector::data: Returnează un pointer la primul element al vectorului, pentru funcții care lucrează cu tablouri C.std::vector::resize: Schimbă numărul de elemente: adaugă elemente noi la final sau le șterge pe cele în plus.