Reputation: 11577
I have long assumed that for any empty std::vector
V, V.begin() == V.end()
. Yet I see nothing in the C++ specification that states this to always be true. Is it necessarily true or does it just happen to be true on most implementations?
Upvotes: 88
Views: 39258
Reputation: 21317
Yes, that's what the standard requires it to be for empty()
for any container.
§ 23.2.1 Table 96 of the C++11 standard says:
Expression | Return Type | Operational Semantics |
---|---|---|
a.empty() |
Convertible to bool | a.begin() == a.end() |
Upvotes: 113
Reputation: 227468
23.2.1 General container requirements, specifically Table 96 Container Requirements has
a.empty()
convertible tobool
, operational semanticsa.begin() == a.end()
Then
6
begin()
returns an iterator referring to the first element in the container.end()
returns an iterator which is the past-the-end value for the container. If the container is empty, thenbegin() == end();
(emphasis mine)
Upvotes: 30
Reputation: 5168
http://www.cplusplus.com/reference/vector/vector/end/
If the container is empty, end() is the same as begin().
Upvotes: -1
Reputation: 4435
Yes, that is true. Here is the proof. And, of course, std::distance(a.begin(), a.end()) == 0
for an empty vector.
Upvotes: -1