Reputation: 2859
Any one could explain me what is the meaning of past-the-end
. Why we call end()
function past-the-end?
Upvotes: 33
Views: 20409
Reputation: 1570
Adding another point to the above correct answers. This was also done to be compatible with arrays. For example in the code below:
char arr[5];
strcpy(arr, "eakgl");
sort(&arr[0], &arr[5]);
This will work fine.
Instead if you had given :
sort(&arr[0], &arr[4]);
it would miss sorting the last character.
This also helps to represent empty containers naturally.
Upvotes: 2
Reputation: 206536
The functions begin()
and end()
define a half open range([begin, end)
), which means:
The range includes first element but excludes the last element. Hence, the name past the end.
The advantage of an half open range is:
It avoids special handling for empty ranges. For empty ranges, begin()
is equal to
end()
.
It makes the end criterion simple for loops that iterate over the elements: The loops simply
continue as long as end()
is not reached
Upvotes: 53
Reputation: 4523
Like interval in mathematics, stl uses [begin, end)
.
That's why we could write for (auto it = v.begin(); it != v.end(); ++it)
Upvotes: 6
Reputation: 21863
Because it doesn't point to the last element of a container, but to somewhere past the last element of a container.
If you dereference end()
it results in undefined behaviour.
Upvotes: 7
Reputation: 63200
Literally, because it points one past the end of the array.
It is used because that element is empty, and can be iterated to, but not dereferenced.
int arry[] = {1, 2, 3, 4, /* end */ };
^^^^^^^
std::end(arry) would point here.
Upvotes: 4