What is the past-the-end iterator in STL C++?

后端 未结 5 1711
情书的邮戳
情书的邮戳 2020-11-29 01:56

Any one could explain me what is the meaning of past-the-end. Why we call end() function past-the-end?

相关标签:
5条回答
  • 2020-11-29 02:28

    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.

    0 讨论(0)
  • 2020-11-29 02:29

    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.

    0 讨论(0)
  • 2020-11-29 02:35

    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.

    enter image description here

    The advantage of an half open range is:

    1. It avoids special handling for empty ranges. For empty ranges, begin() is equal to end() .

    2. It makes the end criterion simple for loops that iterate over the elements: The loops simply continue as long as end() is not reached

    0 讨论(0)
  • 2020-11-29 02:38

    Like interval in mathematics, stl uses [begin, end).

    That's why we could write for (auto it = v.begin(); it != v.end(); ++it)

    0 讨论(0)
  • 2020-11-29 02:40

    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.
    
    0 讨论(0)
提交回复
热议问题