Any one could explain me what is the meaning of past-the-end. Why we call end() function past-the-end?
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