避免在 C++ 中的 if 语句中递增

Avoiding incrementing in if statement in C++

本文关键字:语句 if 中的 C++      更新时间:2023-10-16

我想避免在 if-语句中递增和递减,因为在检查条件时以下代码中存在分段错误(例如,如果我们从 p = 1 和 k = 1 开始(:

if (((heights[k--][p--] < heights[k][p]) || (heights[k--][p--] == heights[k][p])) &&
((heights[k--][p++] < heights[k][p]) || (heights[k--][p++] == heights[k][p])) &&
((heights[k++][p--] < heights[k][p]) || (heights[k++][p--] == heights[k][p])) &&
((heights[k++][p++] < heights[k][p]) || (heights[k++][p++] == heights[k][p]))){
width[k][p] = 3;
}

例如,第二次检查失败,k = -1。 我想在 if 语句中检查二维数组heights的相邻元素,并在万一为真的情况下运行一些逻辑。

如何优化它并通常重写它以使其看起来(和工作(更好?我没有找到任何关于它的信息。

正如其他人所指出的,将所有"k"和"p"变量的"k--"替换为"k-1",将"k++"替换为"k+1"可能会解决分割错误。"k+1"是对"k"之后的下一个数组索引的引用,而"k++"在使用后递增"k"的值。避免使用表达式作为参数也是一种很好的编程习惯。

https://en.cppreference.com/w/cpp/language/operator_incdec

要清理代码,您还可以通过将"<"替换为"<="来简化逻辑 OR。

if ((heights[k-1][p-1] <= heights[k][p]) &&
(heights[k-1][p+1] <= heights[k][p]) &&
(heights[k+1][p-1] <= heights[k][p]) &&
(heights[k+1][p+1] <= heights[k][p])){
width[k][p] = 3;
}