Is begin() == end() for any empty() vector?

后端 未结 4 1035
花落未央
花落未央 2020-12-15 02:19

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

相关标签:
4条回答
  • 2020-12-15 02:48

    Yes, that is true. Here is the proof. And, of course, std::distance(a.begin(), a.end()) == 0 for an empty vector.

    0 讨论(0)
  • 2020-12-15 02:50

    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    |a.begin() == a.end()  |
     |          |to bool        |                      |
     |          |               |                      |
     +-------------------------------------------------+
    
    0 讨论(0)
  • 2020-12-15 03:00

    23.2.1 General container requirements, specifically Table 96 Container Requirements has

    a.empty() convertible to bool, operational semantics a.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, then begin() == end();

    (emphasis mine)

    0 讨论(0)
  • 2020-12-15 03:09

    http://www.cplusplus.com/reference/vector/vector/end/

    If the container is empty, end() is the same as begin().

    0 讨论(0)
提交回复
热议问题