Puis-je faire des calculs normaux avec des itérateurs, c'est-à-dire simplement l'incrémenter en ajoutant un nombre?Puis-je incrémenter un itérateur en ajoutant simplement un nombre?
À titre d'exemple, si je veux supprimer l'élément vec[3]
, puis-je faire ceci:
std::vector<int> vec;
for(int i = 0; i < 5; ++i){
vec.push_back(i);
}
vec.erase(vec.begin() + 3); // removes vec[3] element
Il fonctionne pour moi (g ++), mais je ne suis pas sûr si elle est garanti travailler.
Oh, alors ça ne marcherait pas pour std :: liste? – Frank
Correct; ajouté quelques liens de documentation qui énumèrent quelles fonctions devraient être disponibles pour quels types d'itérateurs. –
Non, ce n'est pas le cas. L'opérateur + signifie "en une étape, saute si loin", ce qu'un itérateur de liste ne peut pas faire. Les itérateurs d'accès non aléatoires (comme les itérateurs de liste) supportent uniquement l'opérateur d'incrément (++) pour faire avancer un élément à la fois. Comme Todd l'a dit, vous pouvez utiliser std :: advance, qui invoque l'opérateur ++ à plusieurs reprises, pour exprimer succinctement l'idée de déplacer un itérateur non aléatoire d'un certain nombre d'étapes. –