j'ai vu le code suivant utilisé pour supprimer un élément choisi parmi std::vector
:Est-ce que l'itérateur supporte + l'opérateur?
vector<hgCoord>::iterator it;
int iIndex = 0;
const int iSelected = 5;
for(it = vecPoints.begin(); it != vecPoints.end(); ++it, ++iIndex)
{
if(iIndex == iSelected)
{
vecPoints.erase(it);
break;
}
}
Je soutiens que ce code n'est pas efficace et doit être écrit comme suit:
vector<hgCoord>::iterator it;
int iIndex = 0;
const int iSelected = 5; // we assume the vector has more than 5 elements.
vecPoints.erase(vecPoints.begin() + iSelected);
Cependant, je ne suis pas Assurez-vous que ce code suit ou non la norme C++ STL.
Vous avez raison, puisque 'std :: vector :: iterator' est un' RandomAccessIterator' (a.k.a. 'T *'). Rappelez-vous simplement que si vous avez moins de 5 éléments dans votre vecteur, votre deuxième algorithme échouera. –
Si ces préfixes-'i' sont une forme de notation hongroise, je m'objecte fortement à l'un ou l'autre morceau de code. –
@ eq-: quoi, parce que 'i' devrait être utilisé comme un préfixe signifiant' itérateur', vous voulez dire ;-p –