() 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 xyzbir 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::beginvestd::endişlevler veya aynı işlev altındaki üye işlevleriyle kutsal bir dans eder .