我有以下代码,
#include <map>
#include <iostream>
int main() {
std::map<int, int> test_m;
test_m[1] = 1;
test_m[2] = 2;
test_m[3] = 3;
test_m[4] = 4;
test_m[7] = 7;
test_m[8] = 8;
auto it2 = test_m.find(2);
auto it7 =test_m.find(7);
auto it_end = test_m.end();
for (auto it = it2; it!=test_m.end(); ++it) {
std::cout << it->second << std::endl;
if (it->second == 3) {
it = test_m.end();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期待:
2
3
Run Code Online (Sandbox Code Playgroud)
但相反我得到
2
3
8
Run Code Online (Sandbox Code Playgroud)
我可以知道为什么吗?
小智 6
问题是您it = test_m.end()在循环内进行分配,但该分配实际上并未终止循环。相反,它只是为循环变量 分配一个新值it,然后在每次迭代结束时递增该值。
要终止循环,可以使用break语句。例如:
for (auto it = it2; it != test_m.end(); ++it) {
std::cout << it->second << std::endl;
if (it->second == 3) {
break; // Terminate the loop
}
}
Run Code Online (Sandbox Code Playgroud)
it->second当 的值等于 3 时,这将导致循环终止,从而产生您期望的输出。