C 11: menzil tabanlı nasıl kullanılır() ile döngü std::map?
C 0 x için yaygın örneği aralığı tabanlı() döngü her zaman böyle basit bir şeyi
std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
std::cout << xyz << std::endl;
}
Bu durumda xyz
int
. Ama, bir harita gibi bir şey olduğunda ne olur? Bu örnekte: 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?
}
Konteyner geçilen basit bir şey olduğu zaman aralığı tabanlı gibi görünüyor() döngüler bize her öğe, bir yineleyici vermeyecektir. Eğer yineleyici olsaydı ne güzel...her zaman yapmamız gereken ilk şey her neyse inceleyebilirsiniz.
Ama haritalar ve multimaps gibi şeyler söz konusu olduğunda ne beklediğini anlamış değilim.
(Hala g aralığı tabanlı döngüler g olan 4.6, henüz deneme fırsatım olmadı olsa 4.4.)
CEVAP
Kabın her öğe std::pair<const K, V>
typedef
map<K, V>::value_type
,. Sonuç olarak, bu gibi yazmak istiyorum
for (auto& kv : myMap) {
std::cout << kv.first << " has value " << kv.second << std::endl;
}
Verimlilik için, döngü parametresi bir referans yapmak için iyi bir fikirdir. Ayrıca eğer bu değerler salt okunur bir görünüm istiyorsan const
yapmayı düşünebiliriz.
Nasıl tamir &; döngü için " ilk bildir...
Nasıl JavaScript ile Döngü üyeleri ola...
Nasıl her döngü için Java çalışır?...
Vim kayıtları nasıl kullanılır?...
Nasıl bir döngü başına 4 Flop teorik m...