2012-10-30 25 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

用表达式替换值 –