条件操作符(conditional operator)是C++中唯一的三元操作符,它允许将简单的if-else判断语句嵌入表达式中.条件操作符的语法格式为:
cond?expr1 : expr2;
其中,cond是一个条件判断表达式.条件操作符首先计算cond的值,如果cond的值为0,则条件为false;如果cond非0,则条件为true.无论如何,cond总是要被计算的.然后,条件为true时计算expr1,否则计算expr2.和逻辑与、逻辑非(&&和||)操作符一样,条件操作符保证了上述操作数的求解次序.expr1和expr2只有一个表达式被计算.下面的程序说明了条件操作符的用法:
int i=10,j=20,k=30;
//if i>j then maxVal=i else maxVal=j
int maxVal=i>j?i:j;
1.避免条件操作符的深度嵌套
可以使用一组嵌套的条件操作符求出三个变量的最大值,并将最大值赋给max
int i=10,j=20,k=30;
int max=i>j
?i>k ? i:k
:j>k ? j:k;
我们也可以用下面更长却更简单的比较语句实现相同的功能:
int max=i;
if(j>max)
max=j;
if(k>max)
max=k;
2.在输出表达式中使用条件操作符
条件操作符的优先级相当低.当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把条件表达式括起来.例如,经常使用条件操作符根据一定的条件输出一个或另一个值,在输出表达式中,如果不严格使用圆括号将条件操作符括起来,将会得到意外的结果:
cout<<(i<j?i:j); //ok:prints larger of i and j
cout<<(i<j)?i:j; //prints 1 or 0!
cout<<i<j?i:j; //error:compares cout to int
第二个表达式比较有趣:它将i和j的比较结果视为<<操作符的操作数,输出1或0.<<操作符返回cout值,然后将返回结果作为条件操作符的判断条件.也就是,第二个表达式等效于:
cout<<(i<j); //prints 1 or 0
cout?i:j; //test cout and then evaluete i or j
//depending on whether cout evalueates to true or false
习题 5.20 编写程序提示用户输入两个数,然后报告哪个数比较小
#include <iostream>
using namespace std;
int main()
{
int val1,val2;
//提示用户输入两个数并接受输入
cout<<"Enter two numbers:"<<endl;
cin>>val1>>val2;
//报告哪个数比较小
cout<<"The smaller one is:"<<(val1<val2?val1:val2)<<endl;
return 0;
}
崩溃了,这段程序有错么?为什么我编译出错
习题5.21 编写程序处理vector<int>对象的元素:将每个奇数值元素用该值的两倍替换
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ivec(20,1);//ivec包含20个值为1的元素
//将每个奇数值元素用该值的两倍替换
for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)
*iter=(*iter%2==0?*iter:*iter*2);
return 0;
}
崩溃中 - -