-1 c++ iterator char stdvector range-based-loop
我尝试了一些基于范围的 for 循环来了解这个概念,对于整数数组和向量,它工作得很好。但对于字符向量,我的编译器不会给出任何错误消息或所需的结果,只是一行红点。这是我的代码:
\n#include <iostream>\n#include <vector>\nusing namespace std;\nint main(){\n vector<char> myVector {\'a\', \'b\', \'c\', \'d\'};\n myVector.push_back(\'e\');\n for (auto i : myVector){\n cout << myVector[i] << endl;\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n什么\xe2\x80\x99s错了?我找不到任何东西。当我用整数替换字符时,效果很好。
\n在这个循环中:
for (auto i : myVector){
cout << myVector[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)
该变量的i类型为char。它是向量中存储的每个元素的副本。因此,要输出向量的元素,您需要编写:
for (auto i : myVector){
cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果不深入细节,您可能会想象这个基于范围的 for 循环如下所示:
for ( auto first = myVector.begin(), last = myVector.end(); first != last; ++first )
{
auto i = *first;
cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 C++ 20 中,基于范围的 for 循环的构造被放大了。例如你可以写
for ( size_t j = 0; auto i : myVector){
std::cout << j++ << ": " << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,程序输出将是
0: a
1: b
2: c
3: d
4: e
Run Code Online (Sandbox Code Playgroud)