2012-10-30 33 views
-7

我想你們解釋這段代碼:代碼交代

cout<< (points.find(make_pair(j, i)) != points.end() ? " X " : " . "); 

我想學習和了解一下這個代碼表示。如果我沒有錯,這是一個寫if語句的簡短形式,對吧?

我想擴大這個聲明,以包括更多的條件。有關如何做到這一點的任何建議?

+5

嘗試如果使用Google 「三元運算符」 – Jasper

+0

打印 「X」 的一對(j,i)的存在於'points',打印 「」 如果它不存在它。 – DevSolar

+0

'points'顯然是一個STL容器,它作爲一個成員函數'find'。 'Find'接受它應該查找的對象(在這種情況下,'pair',因此可以調用'make_pair')並返回一個指向找到的元素的迭代器。如果找不到元素,則返回結束迭代器,即'point.end()'。 ?:表達式的工作原理如下。如果條件爲真,'condition?expr1:expr2'的值就是'expr1'(可能轉換的)的值,如果條件爲假,則爲'expr2'的值(可能轉換) –

回答

2

條件:

points.find(make_pair(j, i)) != points.end() 

試圖找到一對J,I在容器指定地點。如果它找到一個(意思是不返回結束迭代器),那麼它將X輸出到標準輸出。否則它會輸出一個句點(。)。

這(你提供的整個行)基本上是一個單行if else語句。

if(points.find(make_pair(j, i)) != points.end()) 
    cout << " X "; 
else 
    cout << " . "; 
2

test ? if_true : if_false是條件運算符。它就像一個if語句,除了它是一個表達式並且可以出現在任何其他表達式可以出現的地方。

你可以很容易

test1 ? test1_true : test2 ? test2_true : test3 ? test3_true : all_false 
+0

我喜歡級聯的例子:)雖然我會哭,如果我看到在真正的代碼。我們有些東西使用了大約20行,我花了大約2個小時試圖弄清楚如何簡化最終的狀況,哈哈。 –

1

添加更多的條件,這是一個三元運算符。它是建立這樣

condition ? expression_if_true : expression_if_false

+0

用表達式替換值 –