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
中的值。没有理由将中间总和推回堆栈。只需将总和保留在本地,然后从堆栈中逐个弹出值:
哦,你说得对!我真不敢相信我没有想到。非常感谢。它现在正在工作。