空の_std::vector
_ [〜#〜] v [〜#〜]、V.begin() == V.end()
。しかし、C++仕様には、これがalways trueであると記載されているものはありません。それは必ずしも真実ですか、それともたまたまほとんどの実装で真実ですか?
はい、それは標準があらゆるコンテナのempty()
のためにそれを要求するものです。
§23.2.1 C++ 11標準の表96は次のように述べています。
+----------+---------------+----------------------+
|Expression| Return Type | Operational Semantics|
|----------|---------------|----------------------|
|a.empty() |Convertible |a.begin() == a.end() |
| |to bool | |
| | | |
+-------------------------------------------------+
23.2.1一般的なコンテナ要件、具体的には表96 コンテナ要件は
a.empty()
bool
に変換可能、動作セマンティクスa.begin() == a.end()
それから
6
begin()
は、コンテナの最初の要素を参照するイテレータを返します。end()
は、コンテナの過去の値である反復子を返します。 コンテナが空の場合、begin() == end();
(エンファシス鉱山)
http://www.cplusplus.com/reference/vector/vector/end/
コンテナが空の場合、end()はbegin()と同じです。
はい、それは本当です。これが proof です。そして、もちろん、空のベクターの場合はstd::distance(a.begin(), a.end()) == 0
です。