essayer de trouver une information sur ce qui se passe si un vecteur vide utilisé pendant std :: find mais n'a pas eu beaucoup de chance de trouver des informations.
Ma question est, si un vecteur vide est passé à std :: find, la valeur de retour est-elle toujours un nullptr ou s'agit-il d'un comportement non défini?
std::vector<int> someDataContainer; auto it = std::find(someDataContainer.begin(), someDataContainer.end(), 1);
4 Réponses :
Un vecteur vide aura begin () == end ()
donc std :: find
retournera juste immédiatement et retournera end () code >. Aucun comportement indéfini ici.
La valeur de retour de find
lorsque l'élément n'est pas présent est l'itérateur end
:
[ alg.find ] (c'est moi qui souligne):
Soit E:
* i == valeur
pourfind
,- [...]
Renvoie: Le premier itérateur
i
dans la plage[first, last)
pour lequel E vaut < code> vrai . Renvoielast
si aucun itérateur de ce type n'est trouvé .
Cela inclut l'élément absent car la plage est vide.
Peu importe que le conteneur soit vide ou non, std :: find
renverra l'itérateur end
si l'élément n'est pas trouvé.
Et dans un conteneur vide aucun élément ne sera trouvé.
En bref: tout est bien défini et normal.
Il renverra
someDataContainer.end ()
.