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) {
    ...
}