Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从堆栈中弹出所有值,并将它们作为所有值的总和推回?_C++_Stack - Fatal编程技术网

C++ 如何从堆栈中弹出所有值,并将它们作为所有值的总和推回?

C++ 如何从堆栈中弹出所有值,并将它们作为所有值的总和推回?,c++,stack,C++,Stack,欢迎来到我们的社区。我正在尝试创建一个函数,它可以弹出堆栈中的所有值,添加它们,然后将它们推回。到目前为止,我已经成功地将两个值相加、相减、相除和相乘,只需将它们弹出两次到局部变量,执行操作,然后将完成的值推回。但要添加所有内容,我需要从堆栈中弹出,直到其为空 我尝试添加一个循环来弹出两个值并将结果推后。这就是我的想法 push these numbers 1 , 2 , 3, 4 ,5 pop 5 pop 4 add 5 + 4 = 9 push 9 stack (1,2,3,4,9) po

欢迎来到我们的社区。我正在尝试创建一个函数,它可以弹出堆栈中的所有值,添加它们,然后将它们推回。到目前为止,我已经成功地将两个值相加、相减、相除和相乘,只需将它们弹出两次到局部变量,执行操作,然后将完成的值推回。但要添加所有内容,我需要从堆栈中弹出,直到其为空

我尝试添加一个循环来弹出两个值并将结果推后。这就是我的想法

push these numbers 1 , 2 , 3, 4 ,5 
pop 5
pop 4
add 5 + 4 = 9
push 9
stack (1,2,3,4,9)
pop 9
pop 4
add 9+4 = 13
push 13
等等。我已经尝试对循环使用isEmpty函数,并尝试使它在其中一个值不为NULL时停止。但我不知道如何停止或启动循环,所以它会一直运行,直到它变空。这是我写的

void MathStack::addAll()
{
    int num = 0,num2 = 0, sum = 0;

    while(!isEmpty())
    {
    //Pop the first two values off the stack.
    pop(num);
    cout << "Popping " << num << "\n";
    pop(num2);
    cout << "Popping " << num2 << "\n";

    //Add the two values, store in sum.
    sum = num + num2;
    cout << "Sum is " << sum;
    //Push sum back onto the stack.
    push(sum);
    num =0;
    num2 = 0;
    }


}
void MathStack::addAll()
{
int num=0,num2=0,sum=0;
而(!isEmpty())
{
//从堆栈中弹出前两个值。
pop(num);

cout问题在于,当堆栈上有一个项目时,您希望中断循环

假设您从一个三项堆栈开始:

4
8
2
您运行循环,弹出4和8,按12。现在您有:

12
2
14
您再次运行循环,弹出12和2,按下14。现在您有:

12
2
14
堆栈不是空的,所以你去弹出两次


您想在第一次之后调用
isEmpty()
(除了循环条件中的调用之外)。如果它告诉您堆栈为空,则整个堆栈的总和为
num

中的值。没有理由将中间总和推回堆栈。只需将总和保留在本地,然后从堆栈中逐个弹出值:


哦,你说得对!我真不敢相信我没有想到。非常感谢。它现在正在工作。