map<string, int> arr; 放在 for range 使用,就會變成了 for (pair<const string, int> &p: arr) 這樣才能取得 arr 中的 reference 進而去改變值,但是寫成 for (auto &p: arr) 這樣反而更簡單不容易出錯。 #C++ #auto #for
latest #8
如果是 map<int, int> arr; 一樣要在鍵值上加上 const 像是 for(pair<const int, int>& p: arr) 這樣才行。
如果只是單純取值,沒有要變動的話,也可以寫成 for (pair<int, int> p: arr) 跟 for (pair<string, int> p: arr) 這樣直接拿一個副本也可以,效果類似 for (auto p: arr) 這樣。
但是單純取值還是用 for (const auto& p: arr) 比較有效率,畢竟不用浪費資源複製出一個暫時的副本來使用。
nit: use structured binding:
for (const auto& [s, v]: arr) {
...
}
是的,這個也很實用,我只是邊讀 Effective Modern C++ 邊寫下心得,不過還沒看到書上提到 structured binding 也許在後面章節?
Structured binding 是 C++17 的功能,記得 Effective Modern C++ 的內容只有到 C++14 唷
whitglint: 你說的對!怪不得沒有在 Effective Modern C++ 這本書看到。
back to top