Загальний приклад для 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?
}
Коли контейнер, який пересувається, є чимось простим, схоже, що на основі діапазону для () циклів буде подано нам кожен елемент, а не ітератор. Що приємно ... якби це був ітератор, перше, що ми завжди мали би зробити - це знеструмити його все одно.
Але я розгублений, чого очікувати, якщо мова йде про такі речі, як карти та мультимапи.
(Я все ще перебуваю на g ++ 4.4, тоді як цикли на основі діапазону знаходяться в g ++ 4.6+, тому я ще не мав можливості спробувати це.)
std::begin
таstd::end
функціями або членами під одним іменем.