私は長い間、空のstd::vector
Vに対してV.begin() == V.end()
. しかし、これが常に真であると述べている C++ 仕様には何もありません。それは必ずしも真ですか、それともほとんどの実装でたまたま真なのですか?
質問する
29362 次
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()
それで
6
begin()
は、コンテナー内の最初の要素を参照する反復子を返します。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 に答える