Est-ce que begin () == end () pour tout vecteur vide ()?

J’ai longtemps supposé que pour tout std::vector V V.begin() == V.end() , V.begin() == V.end() . Pourtant, je ne vois rien dans la spécification C ++ qui déclare que cela soit toujours vrai. Est-ce nécessairement vrai ou est-il juste vrai sur la plupart des implémentations?

Oui, c’est ce que la norme exige qu’elle soit empty() pour tout conteneur.

§ 23.2.1 Le tableau 96 de la norme C ++ 11 dit:

  +----------+---------------+----------------------+ |Expression| Return Type | Operational Semantics| |----------|---------------|----------------------| |a.empty() |Convertible |a.begin() == a.end() | | |to bool | | | | | | +-------------------------------------------------+ 

23.2.1 Les prescriptions générales relatives aux conteneurs , en particulier le tableau 96,

a.empty() convertible en bool , sémantique opérationnelle a.begin() == a.end()

alors

6 begin() renvoie un iterator faisant référence au premier élément du conteneur. end() renvoie un iterator qui correspond à la valeur de fin du conteneur. Si le conteneur est vide, begin() == end();

(emphase le mien)

http://www.cplusplus.com/reference/vector/vector/end/

Si le conteneur est vide, end () est identique à begin ().

Oui c’est vrai. Voici la preuve . Et, bien sûr, std::distance(a.begin(), a.end()) == 0 pour un vecteur vide.