避免在 C++ 中的 if 语句中递增
Avoiding incrementing in if statement in C++
我想避免在 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;
}
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 我似乎对if/else的基本语句有问题:/
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果中的多个语句是否与多个 if 相同?
- C++ If/Else 语句被跳过
- 使用语句if时逻辑的问题
- 如何添加语句if-else
- 如何将语句if(isalpha(c))从c++转换为MIPS ?
- 在if语句if C++中创建对象时出现作用域问题
- if语句-if/else和参数放置C++