std::map
またはstd::vector
またはそれに含まれるiterator
のいずれかのコンテナを反復している間に、container<>::end
のようなものではなくvariable.end()
と照合されます。例えば、iterator :: end()はなぜ非staticメンバーで、string :: nposと似ていないのですか?
map<int, int> var;
for(map<int, int>::iterator it = var.begin(); it != var.end(); it++)
... ^^^^^^^^^^^^^^^
は、上記の部分を強調することはできませんのようなものに:静的メンバstring::npos
に似て
it != map<int,int>::end
。コンテナベースのタイプごとではなく、可変ベースごとに.end()
を提供するという設計上の決定の背後にある理由は何ですか? (すなわち、map<int,int>::end
とmap<int,double>::end
は異なるであろう。しかし、すべてmap<int,int>
変数について、::end
も同様であろう。)
'begin()'がインスタンスメソッドになるのは面倒ですが、 'end'は静的メンバーですか? 'rbegin()'と 'rend()'はどうでしょうか? –
この質問は理にかなっていません。これが有益な具体的な事例はありますか? – Pubby
@Pubby、いくつかのアプリケーションでは、 'end'と関数の戻り値を直接比較できます。このような場合には、関数のローカルな変数名は必要ありません。 – iammilind