74

私は長い間、空のstd::vector Vに対してV.begin() == V.end(). しかし、これが常に真であると述べている C++ 仕様には何もありません。それは必ずしも真ですか、それともほとんどの実装でたまたま真なのですか?

4

4 に答える 4

96

はい、それは標準がempty()どのコンテナに対してもそれを要求するものです。

§ 23.2.1 C++11 標準の表 96 には次のように記載されています。

 +----------+---------------+----------------------+
 |Expression|  Return Type  | Operational Semantics|
 |----------|---------------|----------------------|
 |a.empty() |Convertible    |a.begin() == a.end()  |
 |          |to bool        |                      |
 |          |               |                      |
 +-------------------------------------------------+
于 2013-07-22T19:53:44.183 に答える
26

23.2.1 一般的なコンテナ要件、特に表 96コンテナ要件には

a.empty()に変換可能bool、運用セマンティクスa.begin() == a.end()

それで

6begin()は、コンテナー内の最初の要素を参照する反復子を返します。end()コンテナの最後の値を表すイテレータを返します。コンテナが空の場合、begin() == end();

(私のものを強調)

于 2013-07-22T19:54:03.753 に答える
1

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

コンテナーが空の場合、end() は begin() と同じです。

于 2013-07-22T19:55:09.347 に答える
0

はい、それは本当です。これが証拠です。そしてもちろん、std::distance(a.begin(), a.end()) == 0空のベクトルの場合。

于 2013-07-22T19:53:43.063 に答える