[英]Which is the fastest STL data structure in C++ to iterate over a large number of elements?
[英]How to iterate over a C++ STL map data structure using the 'auto' keyword?
到目前為止,我一直使用迭代器來遍歷 STL 映射中的所有鍵,如下所示:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it){
std::cout << it->first << " => " << it->second << '\n';
}
最近,雖然我遇到了一些使用不同樣式來迭代鍵的代碼,如下所示。 是否最近才在修訂標准中添加了此功能? 正如許多其他語言已經提供的那樣,這似乎是一種用更少的代碼完成更多工作的有趣方式。
for (auto& x: mymap) {
std::cout << x.first << " => " << x.second << '\n';
}
另外,我很想知道在此處使用關鍵字“auto”的確切含義。
這段代碼使用了 C++11 標准中的 2 個新特性auto 關鍵字,用於類型推斷,以及基於范圍的 for loop 。
僅使用auto
這可以寫為(感謝 Ben)
for (auto it=mymap.begin(); it!=mymap.end(); ++it)
僅使用范圍可以寫成
for (std::pair<const char,int>& x: mymap) {
std::cout << x.first << " => " << x.second << '\n';
}
這兩個版本與您的兩個版本執行完全相同的任務。
除了前面的答案之外,C++17 添加了另一種使用結構化綁定的方法:
for (auto& [key, value]: mymap) {
std::cout << key << " => " << value << '\n';
}
以下對我有用:
for (auto x: mymap) {
cout << x.first << endl;
}
我很想知道在這里使用關鍵字“auto”的確切含義。
它使:
它是 C++11 的新特性,稱為Range-Based for Loops
,它迭代給定范圍、數組或集合的所有元素。 這就是其他編程語言中稱為 foreach 循環的一般語法如下:
for ( decl : coll ) {
statement
}
Auto : 自動類型推導與 auto
使用 C++11,您可以聲明一個變量或對象,而無需指定其特定類型,例如:
auto i = 42; // i has type int
double f();
auto d = f(); // d has type double
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.