有人可以指导我或将其转换成三元运算符吗?我正在使用堆栈来创建一个文本编辑器,它将在其中检查代码中的括号,但我只需要帮助使用三元运算符来缩短此代码。
if(s.at(i)==x.at(j))
{
list.push_back(s.at(i));
}
if(s.at(i)==y.at(j))
{
if(!list.empty())
{
if(list.back()=='(' && s.at(i)==')')
{
v=1;
list.pop_back();
}
else if(list.back()=='{' && s.at(i)=='}')
{
v=1;
list.pop_back();
}
else if(list.back()=='[' && s.at(i)==']')
{
v=1;
list.pop_back();
}
else
{
error_position=i+1;
}
}
else
{
error_position=i+1;
v=0;
}
}
答案 0 :(得分:3)
三元运算符用于选择值,而不是操作。
如果你有条件只分配给同一个变量,那么重写是有意义的 例如,
int x = 0;
if (something)
{
x = 12;
}
else
{
x = 34;
}
更好
int x = something ? 12 : 34;
在代码中使用运算符不会使其更短,只会更复杂且不可读。
它还不清楚它的结果是什么。
唯一可信的候选人是分配给v
的值,但您并未在每个分支中分配给v
,因此它已经结束。
明显的缩短是将{3}加入你的三个条件,但更好的途径可能是完全抽象出测试,例如
||
答案 1 :(得分:2)
您的代码应该清晰易读,这里引入的三元操作会使其不那么清晰,而不是更好,也不会提高性能。
三元运算符通常不应有副作用,只需选择要使用的值即可。 min()很好地利用了三元,即(a<b)?a:b
我的代码中没有可以通过三元运算符更好地表达的块。我通常不会在()中使用at,并且在同一块中多次使用()肯定不一样。因此,计算一次s.at(i),将其放入一个有意义的变量并使用它。