Ce face std::begin
std::begin(x) și std::end(x) fac același lucru ca x.begin() și x.end(), dar merg și pe tablourile C (int t[5]), care nu au funcții membre. Pentru un tablou C returnează pointeri la primul element și la poziția de după ultimul.
Sunt utile în codul generic (șabloane), care trebuie să funcționeze cu orice fel de colecție. Bucla for (auto x : colectie) folosește, în spate, exact această regulă. În C++20 există și variantele din std::ranges (std::ranges::begin), cu verificări suplimentare.
Parametri
| Parametru | Descriere |
|---|---|
container / tablou |
Un container standard, un tablou C sau orice tip cu funcții membre begin()/end(). |
Ce returnează
Un iterator (sau pointer) la primul element, respectiv la poziția de după ultimul.
Exemple
Exemplul 1: Același cod pentru tablou C și vector
#include <algorithm>
#include <iterator>
#include <print>
#include <vector>
template <class Colectie>
int maxim(const Colectie& c) {
return *std::max_element(std::begin(c), std::end(c));
}
int main() {
int tablou[] = {4, 17, 9, 2};
std::vector<int> v{8, 3, 21};
std::sort(std::begin(tablou), std::end(tablou));
std::println("Tablou sortat: {}", tablou);
std::println("Maxim tablou: {}, maxim vector: {}", maxim(tablou), maxim(v));
std::println("Elemente în tablou: {}", std::end(tablou) - std::begin(tablou));
}
Rezultat
Tablou sortat: [2, 4, 9, 17]
Maxim tablou: 17, maxim vector: 21
Elemente în tablou: 4
Greșeli frecvente
- Folosești
std::beginpe un tablou primit ca parametruint t[]. În funcție,teste de fapt un pointer și nu își mai cunoaște lungimea, așa că nu compilează. Foloseștestd::spansaustd::array.
Comenzi înrudite
std::vector::begin: begin() dă un iterator la primul element, end() unul după ultimul, iar rbegin() pornește parcurgerea de la coadă.std::size: std::size dă numărul de elemente al unui container sau tablou C; std::empty spune dacă nu are elemente.std::next: std::next returnează un iterator mutat cu n poziții înainte, std::prev unul mutat înapoi; originalul rămâne neschimbat.std::reverse_iterator: Adaptor care inversează direcția unui iterator: ++ merge spre începutul containerului. Este tipul returnat de rbegin().