Typowym przykładem pętli opartych na zakresie C ++ 11 dla () jest zawsze coś takiego:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
W którym xyz
to przypadku jest int
. Ale co się dzieje, gdy mamy coś w rodzaju mapy? Jaki jest typ zmiennej w tym przykładzie:
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?
}
Gdy kontener, przez który przechodzi się, jest czymś prostym, wygląda na to, że pętle oparte na zakresie dla () dadzą nam każdy element, a nie iterator. Co jest miłe ... gdyby to był iterator, pierwszą rzeczą, którą zawsze musielibyśmy zrobić, to zrezygnować z niego.
Ale jestem zdezorientowany, czego się spodziewać, jeśli chodzi o takie rzeczy jak mapy i multimapy.
(Nadal używam g ++ 4.4, podczas gdy pętle oparte na zakresie są w g ++ 4.6+, więc nie miałem jeszcze okazji tego wypróbować.)
std::begin
istd::end
funkcjami lub funkcjami składowymi o tej samej nazwie.