KT1*_*100 28 c++ stl map c++11
到目前为止,我总是使用迭代器遍历STL映射中的所有键,如下所示:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it){
std::cout << it->first << " => " << it->second << '\n';
}
Run Code Online (Sandbox Code Playgroud)
最近虽然我遇到了一些使用不同样式来迭代键的代码,如下所示.此功能是否仅在最近修订后的标准中添加?与许多其他语言已经提供的一样,这似乎是一种使用较少代码完成更多工作的相当有趣的方式.
for (auto& x: mymap) {
std::cout << x.first << " => " << x.second << '\n';
}
Run Code Online (Sandbox Code Playgroud)
此外,我很想知道在这里使用关键字"auto"的确切含义.
Kar*_*k T 34
此代码使用最新C++标准(C++ 11)中的2个新功能auto关键字,用于类型推断,以及基于for循环的范围.
使用auto这个就可以写成(感谢Ben)
for (auto it=mymap.begin(); it!=mymap.end(); ++it)
Run Code Online (Sandbox Code Playgroud)
只使用范围可以写成
for (std::pair<const char,int>& x: mymap) {
std::cout << x.first << " => " << x.second << '\n';
}
Run Code Online (Sandbox Code Playgroud)
这两个版本都完成了与两个版本完全相同的任务.
mcs*_*vio 13
以下对我有用:
for (auto x: mymap) {
cout << x.first << endl;
}
Run Code Online (Sandbox Code Playgroud)
Bos*_*ash 13
除了之前的答案,C++ 17还增加了另一种使用结构化绑定的方法:
for (auto& [key, value]: mymap) {
std::cout << key << " => " << value << '\n';
}
Run Code Online (Sandbox Code Playgroud)