標準映射的基於範圍的迭代
在C 11 及更高版本中,基於範圍的for() 循環提供了一種方便的迭代語法通過容器。然而,它們在映射等複雜資料結構中的行為可能會令人困惑。
考慮以下範例:
<code class="cpp">std::map<foo, bar> testing = /*...initialized...*/; for (auto abc : testing) { std::cout << abc << std::endl; }</code>
此循環中 abc 的類型為何?它會產生 foo 鍵、bar 值還是迭代器?
解析度
在 C 11 和 C 14 中,基於範圍的循環迭代映射的鍵-值對。因此 abc 的型別是 std::pair
要單獨檢索鍵和值,您可以使用該對的第一個和第二個成員:
<code class="cpp">for (auto abc : testing) { std::cout << abc.first << " has value " << abc.second << std::endl; }</code>
請注意,循環中的變數通常被宣告為const,以表示它們不會修改地圖的內容。
C 17 及以上
In C 17 中,為基於範圍的映射迭代引入了一種方便的簡寫符號:
<code class="cpp">for (const auto& [key, value] : testing) { std::cout << key << " has value " << value << std::endl; }</code>
此語法直接用鍵和值取代第一個和第二個成員。這允許對鍵值對進行更清晰、更簡潔的迭代表達。
其他注意事項
<code class="cpp">for (auto& kv : testing) { std::cout << kv.first << " had value " << kv.second << std::endl; kv.second = "modified"; // Modifies the map's value }</code>
以上是基於範圍的迭代如何與 C 中的標準映射配合使用以及不同版本之間的語法有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!