这里是一组条件,这些条件使用swap函数在向量中移动char,具体取决于某些变量:
if (m == 's')
{
if (currenti == 5)
{
swap(height[currenti][currentj], height[0][currentj]);
}
else if (height[currenti++][currentj] == 'T')
{
cout << "Game over!" << endl;
gameLive = 0;
}
else
{
swap(height[currenti][currentj], height[currenti++][currentj]);
}
}
出于某种原因,else部分中的swap即使被调用也不会交换两个向量部分。 (我在else部分插入了一个cout,以进行检查)。但是,如果我删除其他这样的条件:
if (m == 's')
{
swap(height[currenti][currentj], height[currenti++][currentj]);
}
完全正常。
有人知道是什么原因导致它无法以“ else”格式使用吗?
此行:
swap(height[currenti][currentj], height[currenti++][currentj]); // Don't do it!!
正在用自身交换值!表达式height[currenti++][current]
将currenti
的current值作为第一个索引,然后对其进行递增。
您应该在else
块中使用这样的代码:
else
{
swap(height[currenti][currentj], height[currenti+1][currentj]);
++currenti;
}
注意:在第二个参数中使用pre-increment运算符作为索引很诱人:
swap(height[currenti][currentj], height[++currenti][currentj]); // Don't do it!!
但是这是未定义的行为,因为未指定对std::swap
的参数的求值顺序。两种(增量后或增量前)中的一个或另一个在some平台上工作的时间为some,但您永远不能依赖它。
交换(height [currenti] [currentj],height [currenti ++] [currentj]);