c语言里的‘?’表达式
2020年2月17日
在c语言里面,‘?’表达式叫三相表达式。
一般来说,用三相表达式为某个值赋值比如int a = x > y ? x : y;
但是我试验了下,发现这个的具体作用为根据前面的表达式,执行后面的表达式,然后将表达式的值返回,这样就可以代替用if表达式,我自己测试了下,?表达式执行起来比if快,下面是我的测试代码:
int main()
{
int tmp = 0;
time_t start = clock();
for (int i = 0; i < 1000; ++i)
{
for (int j = 0; j < 1000; ++j)
{
if (tmp == 0)
cout << "hello" << endl;
}
}
time_t pause = clock();
for (int i = 0; i < 1000; ++i)
{
for (int j = 0; j < 1000; ++j)
{
tmp == 0 ? (cout << "hello" << endl) : 0;
}
}
time_t end = clock();
cout << (pause - start) * 1.0 / CLOCKS_PER_SEC << endl;
cout << (end - pause) * 1.0 / CLOCKS_PER_SEC << endl;
return 0;
}
最后的结果为
if | ? |
---|---|
2.06178 | 2.04977 |
2.11626 | 2.05665 |
1.98943 | 2.01137 |
2.00973 | 2.01556 |
2.05302 | 2.03398 |
2.04722 | 2.04339 |
1.99004 | 1.99701 |
可以看出,这两者的相差并不是很明显。
然后,我们换一种测试方式:
int main()
{
int tmp = 0;
time_t start = clock();
for (int i = 0; i < 1000; ++i)
{
for (int j = 0; j < 1000; ++j)
{
if (tmp == 1)
cout << "hello" << endl;
else
{
cout << "world" << endl;
}
}
}
time_t pause = clock();
for (int i = 0; i < 1000; ++i)
{
for (int j = 0; j < 1000; ++j)
{
tmp == 1 ? (cout << "hello" << endl) : (cout << "world" << endl);
}
}
time_t end = clock();
cout << (pause - start) * 1.0 / CLOCKS_PER_SEC << endl;
cout << (end - pause) * 1.0 / CLOCKS_PER_SEC << endl;
return 0;
}
最后测试的结果为:
if | ? |
---|---|
2.07589 | 2.02184 |
2.01759 | 2.00912 |
2.01515 | 2.02278 |
2.03697 | 2.02643 |
2.04685 | 2.02069 |
2.02305 | 2.02106 |
2.03817 | 2.07235 |
可以看出,其实,这个逼东西,玄学。压根就不知道哪个更快。但是我觉得这个看上去比较比较nb。
比如这样的:
height[left] >= left_max ? (left_max = height[left]) : ans += (left_max - height[left]);
这尼玛看着就帅啊。虽然没啥卵用,但是就这样吧。
Previous
电话号码的字符组合(leetcode_17)
Newer