Типичный пример циклов for (), основанных на диапазоне C ++ 11, всегда выглядит примерно так:
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
функциями или функциями-членами под тем же именем.