2
votes

Est-ce que std :: find sur un vecteur vide provoque un comportement indéfini?

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);


1 commentaires

Il renverra someDataContainer.end () .


4 Réponses :


5
votes

Un vecteur vide aura begin () == end () donc std :: find retournera juste immédiatement et retournera end () . Aucun comportement indéfini ici.


0 commentaires

8
votes

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 pour find ,
  • [...]

Renvoie: Le premier itérateur i dans la plage [first, last) pour lequel E vaut < code> vrai . Renvoie last si aucun itérateur de ce type n'est trouvé .

Cela inclut l'élément absent car la plage est vide.


0 commentaires

4
votes

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.


0 commentaires

2
votes

Il est documenté sur ici et ici . Si l'élément ne peut pas être trouvé, last est renvoyé, c'est-à-dire que dans votre cas, il pointera vers someDataContainer.end () .


0 commentaires