[英]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' 的值。 避免將表達式用作 arguments 也是一種很好的編程習慣。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.