std::vector::operator[] în C++

std::vector C++98

Accesează elementul de pe o poziție cu v[i], fără verificare a limitelor.

Sintaxă
reference operator[](size_type pozitie);
const_reference operator[](size_type pozitie) const;

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 este v[v.size() - 1] sau v.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ște push_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_DEBUG la 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.