簡體   English   中英

如何使用“auto”關鍵字迭代 C++ STL 映射數據結構?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM