逻辑或表达式c++; 我在C++中使用逻辑或运算符有问题。问题是,如果左侧为真,则不会计算右侧表达式。我有两个deque-s,我需要从它们中弹出一段时间,但是如果我可以从第一个deque弹出,我就不会从第二个deque弹出,因为OR操作符没有计算。我怎样才能克服这个问题。下面是一段代码: while( D.popLeft( k ) || E.popLeft( m ) ) { if( k < m ) { C.pushRight( k ); E.pushLeft( m ); } else { C.pushRight( m ); D.pushLeft( k ); } } while(D.popLeft(k)| E.popLeft(m)) { if(k

逻辑或表达式c++; 我在C++中使用逻辑或运算符有问题。问题是,如果左侧为真,则不会计算右侧表达式。我有两个deque-s,我需要从它们中弹出一段时间,但是如果我可以从第一个deque弹出,我就不会从第二个deque弹出,因为OR操作符没有计算。我怎样才能克服这个问题。下面是一段代码: while( D.popLeft( k ) || E.popLeft( m ) ) { if( k < m ) { C.pushRight( k ); E.pushLeft( m ); } else { C.pushRight( m ); D.pushLeft( k ); } } while(D.popLeft(k)| E.popLeft(m)) { if(k,c++,operators,expression,C++,Operators,Expression,使用&&运算符 while( D.popLeft( k ) && E.popLeft( m ) ) 我想您只想在可以同时填充m和k的情况下运行循环的内容,对吗?然后简单地用AND替换OR: while( D.popLeft( k ) && E.popLeft( m ) ) { if( k < m ) { C.pushRight( k ); E.pushLeft( m ); } else {

使用
&&
运算符

while( D.popLeft( k ) && E.popLeft( m ) )

我想您只想在可以同时填充m和k的情况下运行循环的内容,对吗?然后简单地用AND替换OR:

while( D.popLeft( k ) && E.popLeft( m ) )
{
    if( k < m )
    {
      C.pushRight( k );
      E.pushLeft( m );
    }
    else
    {
      C.pushRight( m );
      D.pushLeft( k );
    }
}
while(D.popLeft(k)和E.popLeft(m))
{
if(k

然后两个POP都将被执行。

假设您希望保留您的
|
(并且不使用
&&
),您可以分别评估:

bool canPopE = E.popLeft( m );
bool canPopD = D.popLeft( k );
bool canPop = canPopD || canPopE;

while( canPop )
{
    if( k < m )
    {
      C.pushRight( k );
      E.pushLeft( m );
    }
    else
    {
      C.pushRight( m );
      D.pushLeft( k );
    }

    canPopE = E.popLeft( m );
    canPopD = D.popLeft( k );
    canPop = canPopD || canPopE;
}
boolcanpope=E.popLeft(m);
bool-canPopD=D.poplight(k);
bool canPop=canPopD | | canPopE;
while(canPop)
{
if(k默认情况下C++逻辑运算符使用短路机制,如果你想在没有短路的情况下完成循环,则使用渴望操作符“y”。这将以任何方式计算这两个表达式。


这不是一个“问题”;这是一个特性。你能详细解释一下吗?@KirilKirov:当然,这可能会打破循环条件,尽管目前还不完全清楚这种条件是什么。是的,我太蠢了,它非常简单!谢谢大家,对不起这个愚蠢的问题:-如果你解决了这个问题,你可以考虑接受一个正确答案作为答案(按刻度标记)。这样,后来偶然发现这个问题的人就可以清楚地知道什么是解决这个问题的好方法。虽然这确实保持了OR条件,但它为更令人不安的问题奠定了基础,即在k和m还没有出现的时候调用它们。严格地说,你是对的,这是维持逻辑的一种体面的方式,但我相当确信提问者的意图有所不同。不过,我们不能肯定,因为OP的意图并不完全清楚。@Joost我完全同意,只是提供了一个问题的直接解决方案(即弹出两边)。而我使用的是将两个排序的Deque合并到一个排序的Deque中。但我在尝试做这件事时遇到了困难。对不起,我的英语不好。那么,你能改变你的问题来表达你想说的吗?
while( D.popLeft( k ) | E.popLeft( m ) )