Je suppose depuis longtemps que pour tout std::vector
V , V.begin() == V.end()
vide. Pourtant, je ne vois rien dans la spécification C++ qui indique ceci pour toujours être vrai. Est-ce nécessairement vrai ou est-ce juste vrai sur la plupart des implémentations?
Oui, c'est ce que la norme exige pour empty()
pour n'importe quel 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 Exigences générales relatives aux conteneurs, en particulier le tableau 96 Exigences relatives aux conteneurs a
a.empty()
convertible enbool
, sémantique opérationnellea.begin() == a.end()
Ensuite
6
begin()
renvoie un itérateur faisant référence au premier élément du conteneur.end()
renvoie un itérateur qui est la valeur de fin de fin pour le conteneur. Si le conteneur est vide, alorsbegin() == end();
(c'est moi qui souligne)
http://www.cplusplus.com/reference/vector/vector/end/
Si le conteneur est vide, end () est identique à begin ().
Oui c'est vrai. Voici le preuve . Et, bien sûr, std::distance(a.begin(), a.end()) == 0
pour un vecteur vide.