C++ 在堆栈中循环时,在堆栈中显示负片

C++ 在堆栈中循环时,在堆栈中显示负片,c++,loops,C++,Loops,我试图编写一个函数,告诉用户堆栈中负数的数量。我被下面的问题困住了,到目前为止我还没有得到正确的答案。我已经用几个测试堆栈对它进行了测试。我认为问题在于循环的放置方式。任何帮助都将不胜感激 int negcount = 0; for(int i=0; i<mystack.size(); i++) { if(mystack.top() < 0) { negcount++; mystack.pop(); }else { m

我试图编写一个函数,告诉用户堆栈中负数的数量。我被下面的问题困住了,到目前为止我还没有得到正确的答案。我已经用几个测试堆栈对它进行了测试。我认为问题在于循环的放置方式。任何帮助都将不胜感激

int negcount = 0;
for(int i=0; i<mystack.size(); i++) {

    if(mystack.top() < 0) {
        negcount++;
        mystack.pop();
    }else {
        mystack.pop();
    }
}
return negcount;
int negcount=0;

for(int i=0;i您的for循环是错误的,因为每次您从堆栈中弹出一个项时。以下是对您有效的方法:

    int negcount = 0;
            while(mystack.size()>0) {

                    if(mystack.top() < 0) {
                            negcount++;
                            mystack.pop();                      
                    }else {             
                            mystack.pop();
                    }
           }
   return negcount;
int negcount=0;
while(mystack.size()>0){
if(mystack.top()<0){
negcount++;
mystack.pop();
}否则{
mystack.pop();
}
}
返回负计数;

我不认为是最好的方法来循环你正在修改的集合。一些语句中的if//2有点多余。我对C++不太熟悉,但你可以这样做:

while(mystack.size() > 0) 
{ 
     if (mystack.top() < 0) negcount++;
     mystack.pop();
} 
return negcount;
while(mystack.size()>0)
{ 
if(mystack.top()<0)negcount++;
mystack.pop();
} 
返回负计数;

既然您根本不使用i,就使用while(mystack.size()>0)吧。您确定要对堆栈进行变异吗?我不认为for是遍历正在修改的集合的最佳方式。if/else中的某些语句有点多余。我不确定pop()是否从堆栈中返回元素,但如果返回,则可以执行以下操作:while(mystack.size()>0){int x=mystack().pop();if(x<0)negcount++;}return negcount;是堆栈。size()在需要
mystack.pop()的两种情况下都提供正确的堆栈大小
因此,将其置于保存LOC的条件之外。代码的问题是,最终我将赶上非零大小。如果堆栈大小=10,它将在到达i之前弹出5次,留下堆栈中的底部5项未被解释。若要解决此问题,请将i--添加到循环的底部,或者执行显而易见的操作并将其更改为while(MyStay.siz())0。-1:在C++中,POPLE()不返回任何东西,因为异常安全。是的,我不确定,但我取得了一个信念的飞跃:)@ ActhsisiRunnun,我实际上从来没有用C++中的堆栈,所以这对我来说也是新的。我曾经需要使用堆栈。你是对的,我没有正确地进行循环。谢谢!