O exemplo comum para loops for () baseados no intervalo do C ++ 11 é sempre algo simples como este:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
Nesse caso, xyz
é um int
. Mas, o que acontece quando temos algo como um mapa? Qual é o tipo da variável neste exemplo:
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?
}
Quando o contêiner que está sendo atravessado é algo simples, parece que os loops baseados em intervalo para () nos fornecerão cada item, não um iterador. O que é legal ... se fosse o iterador, a primeira coisa que sempre precisaríamos fazer é desreferenciar isso de qualquer maneira.
Mas estou confuso sobre o que esperar quando se trata de mapas e mapas múltiplos.
(Ainda estou no g ++ 4.4, enquanto os loops baseados em intervalo estão no g ++ 4.6+, então ainda não tive a chance de experimentá-lo.)
std::begin
estd::end
funções padrão ou funções-membro com o mesmo nome.