Ce face std::size
std::size(x) returnează x.size() pentru containere și N pentru un tablou C de N elemente. Înlocuiește vechiul truc sizeof(t) / sizeof(t[0]), care dă rezultate greșite (fără nicio eroare) dacă t este de fapt un pointer.
std::empty(x) returnează x.empty() pentru containere și false pentru tablouri C (care nu pot avea 0 elemente). Din C++20, std::ssize(x) dă dimensiunea ca număr cu semn, util când o compari cu un int.
Parametri
| Parametru | Descriere |
|---|---|
container / tablou |
Un container standard, un tablou C sau un std::initializer_list. |
Ce returnează
std::size: numărul de elemente. std::empty: bool.
Exemple
Exemplul 1: Dimensiunea oricărei colecții
#include <iterator>
#include <map>
#include <print>
#include <string>
#include <vector>
int main() {
const char* luni[] = {"ianuarie", "februarie", "martie"};
std::vector<int> note{9, 8};
std::map<std::string, int> gol;
std::println("luni: {}, note: {}, gol: {}", std::size(luni), std::size(note), std::size(gol));
std::println("note goale? {} map gol? {}", std::empty(note), std::empty(gol));
for (int i = 0; i < std::ssize(luni); ++i) { // ssize: int cu int, fără avertismente
std::println("{}. {}", i + 1, luni[i]);
}
}
Rezultat
luni: 3, note: 2, gol: 0
note goale? false map gol? true
1. ianuarie
2. februarie
3. martie
Greșeli frecvente
- Folosești
sizeof(t) / sizeof(t[0])pe un parametru de funcțieint t[]: obții dimensiunea unui pointer împărțită la cea a unuiint(de obicei 2), nu numărul de elemente.std::sizerefuză să compileze în acest caz, ceea ce e mai sigur.
Comenzi înrudite
std::vector::size: size() spune câte elemente are vectorul; empty() spune dacă nu are niciunul.std::begin: Funcții libere care dau iteratorul de început și de sfârșit pentru orice container, inclusiv pentru tablourile C.std::array: Tablou cu dimensiune fixă, cunoscută la compilare, cu interfața unui container (size, at, begin, end).