Ich habe lange angenommen, dass für jedes leere std::vector
V , V.begin() == V.end()
. Ich sehe jedoch nichts in der C ++ - Spezifikation, was besagt, dass dies immer wahr ist. Ist es notwendigerweise wahr oder ist es bei den meisten Implementierungen einfach wahr?
71
begin()
undend()
zuerst in Zeiger umgewandelt werden, gilt die Gleichheit immer noch? Ich mache mir Sorgen, dass auch das Casting undefiniert ist?Antworten:
Ja, das verlangt der Standard
empty()
für jeden Container.§ 23.2.1 In Tabelle 96 des C ++ 11-Standards heißt es:
quelle
23.2.1 Allgemeine Behälter Anforderungen , insbesondere Tabelle 96 Container Anforderungen haben
Dann
(Hervorhebung von mir)
quelle
http://www.cplusplus.com/reference/vector/vector/end/
Wenn der Container leer ist, ist end () dasselbe wie begin ().
quelle
Ja, das ist wahr. Hier ist der Beweis . Und natürlich
std::distance(a.begin(), a.end()) == 0
für einen leeren Vektor.quelle