Ce face std::vector::resize
resize(n) face ca vectorul să aibă exact n elemente. Dacă n este mai mare decât size(), adaugă la final elemente noi: 0 pentru numere, text gol pentru std::string, sau valoare, dacă o dai. Dacă n este mai mic, șterge elementele de la final.
Diferența față de reserve: resize creează elemente reale (le poți accesa cu v[i]), iar reserve doar rezervă memorie, fără să schimbe size(). Dacă resize crește vectorul peste capacitate, se realocă memoria și toți iteratorii devin invalizi.
Parametri
| Parametru | Descriere |
|---|---|
n |
Noua dimensiune. |
valoare |
Valoarea elementelor adăugate (opțională). |
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Mărire și micșorare
#include <print>
#include <vector>
int main() {
std::vector<int> v{1, 2, 3};
v.resize(5); // adaugă două zerouri
std::println("{}", v);
v.resize(7, 9); // adaugă două elemente egale cu 9
std::println("{}", v);
v.resize(2); // păstrează doar primele două
std::println("{}", v);
}
Rezultat
[1, 2, 3, 0, 0]
[1, 2, 3, 0, 0, 9, 9]
[1, 2]
Exemplul 2: Pregătirea unui vector pentru scriere cu indice
După resize(7), pozițiile 0-6 există, deci vanzari[zi] += ... este corect.
#include <print>
#include <vector>
int main() {
std::vector<int> vanzari;
vanzari.resize(7); // câte o poziție pentru fiecare zi
int bonuri[][2] = {{0, 120}, {2, 75}, {0, 30}, {6, 210}}; // {zi, sumă}
for (const auto& bon : bonuri) {
vanzari[static_cast<std::size_t>(bon[0])] += bon[1];
}
std::println("{}", vanzari);
}
Rezultat
[150, 0, 75, 0, 0, 0, 210]
Greșeli frecvente
- Folosești
reserve(n)și apoi scriiv[i] = .... Dupăreserve, vectorul are tot 0 elemente; ai nevoie deresize(n)(sau depush_back). - Faci
resizemai mare și apoipush_back, crezând că valorile vor intra pe pozițiile noi.push_backadaugă după elementele create deresize.
Comenzi înrudite
std::vector::reserve: reserve() rezervă memorie pentru n elemente, capacity() spune cât loc este rezervat, iar shrink_to_fit() cere eliberarea locului nefolosit.std::vector::size: size() spune câte elemente are vectorul; empty() spune dacă nu are niciunul.std::vector::assign: Înlocuiește tot conținutul vectorului cu n copii ale unei valori, cu un interval sau cu o listă.