Tools c 的三目運算子

2021-08-20 10:29:10 字數 1522 閱讀 1310

三目運算子,聽起來彷彿挺高大上,其實上並沒有。只不過是乙個壓**的好東西罷了

三目運算子的表達形式一般為表示式a?表示式b:表示式c,它所表達的意思就是if (表示式a) 表示式b; else 表示式c

上面的兩個式子其實是乙個意思,當然,三目運算子還有更廣泛的應用。

比如說下面這個並查集的路徑壓縮板子:

void getroot(int x)
非常經典,ifelse結構明顯可以使用三目運算子壓縮**。為了讓**更短,我們先對源**修改一下

void getroot(int x)
上面的**把後兩句壓到了一起,現在就可以很顯然地使用它來壓縮**了。

void getroot(int x)
怎麼樣?是不是很簡潔?,充分體現了並查集的簡潔性,比較可惜的是它使用了遞迴,所以無法用#define把它壓縮成一行了。

另外再舉個相似的例子,就是ma

x() max

()

,普通的ma

x() max

()

應該很好寫:

int

max(int x, int y)

這個就很顯然了吧。縮的版本的ma

x() max

()

如下:

void

max(int x, int y)

或者更短(這是我最常用的版本)

#define max(x, y) ((x) > (y) ? (x) : (y))
三目運算子經常巢狀在乙個什麼東西裡面(反正我經常這麼玩)。

比如說求個最短路徑,最後問你s到t有沒有路徑,如果有,輸出最短路徑,如果沒有輸出-1.

樸素的演算法很好像,開始給di

std is

t[

]賦值成

∞ ∞

,跑一遍單源最短路徑演算法。在結尾上加上這幾句即可:

if (dist[t] == infty) printf("-1");

else

printf("%d\n", dist[t]);

典型的ifelse結構,用三目運算子縮寫如下:

dist[t] == infty ? printf("-1") : printf("%d\n", dist[t]);
看到這可能有些人會問為什麼三目運算子可以單獨存在,其實仔細想想這才是最正常的。

上面的東西還可以再縮一下:

printf("%d\n", dist[t] == infty ? -1 : dist[t]);
這就是所謂巢狀,理解起來也不難。

總而言之,三目運算子是乙個相當好用的東西,反正我在寫平衡樹時使用了無數三目運算子,而且寫三目運算子一點都不繁瑣,而且相當易懂。總之壓**非常方便就對了

三目運算子

1 概念 根據不同的條件,執行不同的操作 返回不同的值。條件1?值1 或操作1 如果滿足條件 1,就返回值 1或執行操作1 條件2?值2 或操作2 否則,如果滿足條件 2,就返回值 2或執行操作2 總結 表示式 閏年 平年 多種條件 條件 1?值1 條件2?值 值3例子 1 輸入星期四 就輸出 班級...

三目運算子

單目運算子 3 雙目運算子 3 4 三目運算子 格式 表達關係式 表示式1 表示式2 如果條件為true,運算後的結果是表示式1 如果條件為false,運算後的結果是表示式2 比較表示式 結果是乙個boolean型別 執行流程 根據比較表示式的計算返回乙個true或者false。如果是true,就把...

三目運算子

1.用控制台輸入3個整數,必須使用三目運算子使其顯示出最大值。int a,b,c console.writeline 請輸入第1個數 a int.parse console.readline console.writeline 請輸入第2個數 b int.parse console.readline...