我有以下代码,
#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();
}
}
}
我期待:
2
3
但我却得到了
2
3
8
我能知道为什么吗?
1条答案
按热度按时间ffvjumwh1#
问题在于,你在循环内部赋值
it = test_m.end()
,但是这个赋值并没有真正终止循环,而是简单地给循环变量it
赋值,然后在每次迭代结束时递增。要终止循环,可以使用
break
语句。例如:这将导致循环在
it->second
的值等于3时终止,从而产生您所期望的输出。