Je suis la découverte de C++11, varient en fonction de la boucle et l'aime déjà. Il vous fait économiser beaucoup de temps lors du codage.
Cependant, je suis habitué à l'écriture de certaines boucles supplémentaires, des déclarations, conditions, et je me demande ce que ceci peut être réalisé lors de l'utilisation de C++11, varient en fonction de la boucle:
1. Extra incrémentation
std::vector<int> v = { 1, 2, 3, 4, 5 };
size_t index = 0;
for ( std::vector<int>::const_iterator iter = v.begin(); iter != v.end(); ++iter, ++index )
{
std::cout << "v at index " << index << " is " << *iter;
}
Peut devenir:
size_t index = 0;
for ( int val : v )
{
std::cout << "v at index " << index << " is " << *iter;
++index;
}
Cependant, l'incrémentation index
dans la for
boucle est mieux parce que garanti (incrémenté même si for
boucle a continue
états par exemple)
Est-il un moyen de déplacer ++index
à l'intérieur de l' for
déclaration?
2. Obtenez de l'itération de l'index de façon dynamique
std::vector<int> v = { 1, 2, 3, 4, 5 };
for ( std::vector<int>::const_iterator iter = v.begin(); iter != v.end(); ++iter )
{
std::cout << "v at index " << ( iter - v.begin() ) << " is " << *iter;
}
Quelque chose de similaire réalisé avec C++11 gamme de boucles? Est-il un moyen de savoir combien d'itérations ont été fait jusqu'à présent?
3. Extra condition de sortie
J'utilise souvent dans le code à l'endroit où la rupture est aussi interdit d'utiliser un codage guidline:
std::vector<int> v = { 1, 2, 3, 4, 5 };
bool continueLoop = true;
for ( std::vector<int>::const_iterator iter = v.begin(); iter != v.end() && continueLoop; ++iter )
{
std::cout << "v value is " << *iter;
if ( *iter == 4 )
continueLoop = false;
}
Quelque chose de similaire réalisé avec C++11 gamme de boucles (pause exeuction sans l'aide d'un break)?