L'esempio comune per i loop () basati su intervallo C ++ 11 è sempre qualcosa di semplice come questo:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
Nel qual caso xyz
è un int
. Ma cosa succede quando abbiamo qualcosa come una mappa? Qual è il tipo di variabile in questo esempio:
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 il contenitore attraversato è qualcosa di semplice, sembra che i cicli () basati sulla portata ci forniscano ogni elemento, non un iteratore. Il che è bello ... se fosse iteratore, la prima cosa che dovremmo sempre fare è dereferenziarlo comunque.
Ma sono confuso su cosa aspettarsi quando si tratta di cose come mappe e multimappa.
(Sono ancora su g ++ 4.4, mentre i loop basati su range sono in g ++ 4.6+, quindi non ho ancora avuto la possibilità di provarlo.)
std::begin
e lestd::end
funzioni o le funzioni membro con lo stesso nome.