C ++ 11の範囲ベースのfor()ループの一般的な例は、常に次のような単純なものです。
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
その場合xyz
はint
です。しかし、マップのようなものがあるとどうなりますか?この例の変数のタイプは何ですか?
std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
std::cout << abc << std::endl; // ? should this give a foo? a bar?
std::cout << abc->first << std::endl; // ? or is abc an iterator?
}
トラバースされるコンテナーが単純なものである場合、範囲ベースのfor()ループはイテレーターではなく各項目を提供するように見えます。これはいいことです...イテレータである場合、常に最初に行う必要があるのは、とにかく逆参照することです。
しかし、私はそれがマップやマルチマップのようなものになると何を期待するかについて混乱しています。
(私はまだg ++ 4.4を使用していますが、範囲ベースのループはg ++ 4.6+にあるため、まだ試す機会がありませんでした。)
std::begin
とstd::end
同じ名前の関数またはメンバー関数で不誠実なダンスをします。