Cet article utilise des éléments syntaxiques de C++ 11.
Avec C++ 11, des versions des services begin() et end() sont offertes à même le standard sous forme de fonctions plutôt que sous forme de méthodes (comme c'est traditionnellement le cas avec les conteneurs standards). Ces nouveaux outils ont cette qualité qu'ils sont aussi applicables aux tableaux bruts, dans la mesure où ils sont locaux à la fonction ou du moins dans la mesure où la taille d'un tel tableau est connue du compilateur au moment où ils sont utilisés.
À titre d'exemple, nous pourrions remplacer l'écriture suivante :
#include <iostream>
int main()
{
using namespace std;
int vals[] = { 1, 2, 3, 4, 5 };
enum { N = sizeof(vals)/sizeof(*vals) };
for (int i = 0; i < N; ++i)
cout << vals[i] << endl;
}
...par celle-ci :
#include <iostream>
#include <algorithm>
int main()
{
using namespace std;
int vals[] = { 1, 2, 3, 4, 5 };
for (auto itt = begin(vals); itt != end(vals); ++itt)
cout << *itt << endl;
}
Notez le recours à auto pour le type de l'itérateur, ce qui indique au compilateur de déduire le type de la variable itt du type de ce que retourne begin(). Cette nouvelle écriture est avantageuse à bien des égards, et s'intègre harmonieusement au reste du standard. De plus, à tout endroit où nous pouvons utiliser v.begin() pour un conteneur standard v donné, il est possible d'écrire begin(v). C'est donc cette écriture qui prédominera sans doute à partir de maintenant.