C++ 为什么执行以下循环 std::vector tmp=。。。 for(int i=0;i
,因为您的C++ 为什么执行以下循环 std::vector tmp=。。。 for(int i=0;i,c++,C++,,因为您的tmp.size()仅为1,在for循环中: std::vector<int> tmp = ... for(int i = 0; i <= tmp.size() - 3; i+=2){ std::cout << "i: " << i << " , tmp.size(): " << tmp.size() << std::endl; if(tmp[i] == tmp[i+1]){
tmp.size()
仅为1,在for
循环中:
std::vector<int> tmp = ...
for(int i = 0; i <= tmp.size() - 3; i+=2){
std::cout << "i: " << i << " , tmp.size(): " << tmp.size() << std::endl;
if(tmp[i] == tmp[i+1]){
final.push_back(tmp[i] * 2);
}else{
final.push_back(tmp[i]);
final.push_back(tmp[i + 1]);
}
std::cout << "\ntmp.size() at the end of loop: " << tmp.size() << "\n";
}
for(int i=0;i因为tmp.size()
是1
,从中减去3会产生一个负值。也就是说,如果不是tmp.size()
是size\u t
,它是无符号的,减法会产生一个负值
当一个无符号的减法即将变为负数时,它会“环绕”到一个非常大的值。这就是循环无法停止的原因。它还解释了编译器*产生的“有符号到无符号比较”警告,这应该让您处于高度警惕状态
要避免此问题,请将减法移到另一侧,并使其成为加法:
for(int i = 0; i <= tmp.size() - 3; i+=2) { /* ... */ }
for(size\u t i=0;i+3 i不应该是int:它应该是vector::size\u type看起来像try-Wconversion
更改为i+3遗憾的是代码不是a。除此之外,这是一个相当有趣的问题。我根据评论编辑添加了tmp
的定义。投票重新打开问题。
for (size_t i = 0 ; i+3 <= tmp.size() ; i += 2) {
...
}