() Döngüleri için C ++ 11 aralık tabanlı genel örnek her zaman böyle basit bir şeydir:
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
Bu durumda xyz
bir int
. Fakat harita gibi bir şeyimiz olduğunda ne olur? Bu örnekteki değişkenin türü nedir:
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?
}
Geçilen kap basit bir şey olduğunda, () döngüler için aralık tabanlı bir yineleyici değil bize her öğeyi verecek gibi görünüyor. Bu güzel ... eğer yineleyici olsaydı, her zaman yapmamız gereken ilk şey yine de dereference.
Ancak, haritalar ve multimaps gibi şeyler söz konusu olduğunda ne olacağı konusunda kafam karıştı.
(Aralık tabanlı döngüler g ++ 4.6+ içindeyken hala g ++ 4.4 kullanıyorum, bu yüzden henüz deneme şansım olmadı.)
std::begin
vestd::end
işlevler veya aynı işlev altındaki üye işlevleriyle kutsal bir dans eder .