Ce face std::vector::clear
clear() distruge toate elementele, iar size() devine 0. Capacitatea (memoria rezervată) nu se schimbă, așa că un vector golit poate fi umplut din nou fără realocări.
Toți iteratorii, pointerii și referințele la elemente devin invalide. Dacă vrei să eliberezi și memoria, apelează după clear() și shrink_to_fit().
Ce returnează
Nimic (void).
Exemple
Exemplul 1: Golirea coșului
#include <print>
#include <string>
#include <vector>
int main() {
std::vector<std::string> cos{"mere", "pere", "prune"};
std::println("Înainte: {} (capacity {})", cos, cos.capacity());
cos.clear();
std::println("După: {} (size {}, capacity {})", cos, cos.size(), cos.capacity());
}
Rezultat
Înainte: ["mere", "pere", "prune"] (capacity 3)
După: [] (size 0, capacity 3)
Exemplul 2: Reutilizarea aceluiași vector
La fiecare zi refolosim vectorul: clear() păstrează memoria, deci nu se mai alocă din nou.
#include <print>
#include <vector>
int main() {
std::vector<std::vector<int>> zile{{5, 3}, {8, 1, 4}, {2}};
std::vector<int> vanzari;
for (const auto& zi : zile) {
vanzari.clear();
for (int x : zi) {
vanzari.push_back(x * 10);
}
std::println("{}", vanzari);
}
}
Rezultat
[50, 30]
[80, 10, 40]
[20]
Greșeli frecvente
- Te aștepți ca memoria să fie eliberată după
clear(). Nu este; foloseșteshrink_to_fit()dacă vectorul era mare și nu îl mai umpli. - Folosești un iterator obținut înainte de
clear(). După golire, el nu mai indică un element valid.
Comenzi înrudite
std::vector::erase: Șterge un element sau un interval de elemente din vector și returnează iteratorul elementului de după.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.