在C++中使用队列和堆栈对 2 个向量进行加减
Addition and substraction of 2 vectors using queue and stack in C++
我的C++代码有问题。我需要使用一些头文件逐个组件地添加和减去 2 个数学向量,但我也可以实现一些其他函数。问题是我的程序没有任何错误,但它没有执行......例如,如果我有向量 A(3,5) 和 B(1,7),结果应该是:A+B=(4,12) 和 A-B=(2, -2)。这是我的主要.cpp文件:
#include <iostream>
#include "queque.h"
#include "stack_base.h"
using namespace std;
template<typename T>
class App {
public:
Stack<T> stack;
T minEle;
App(Stack<T> stack) {
this->stack = stack;
}
T sum(){
Stack<T> tempStack = stack;
T sum=1;
for(int i=0;i<stack.getTopLevel();i++){
sum+=tempStack.peek();
tempStack.pop();
}
return sum;
}
T substract(){
Stack<T> tempStack = stack;
T sum=1;
for(int i=0;i<stack.getTopLevel();i++){
sum-=tempStack.peek();
tempStack.pop();
}
return sum;
}
};
int main(){
Stack<int> myStack;
App<int> a(myStack);
int values[7] = {5, 2, 3, 1, 4, 8, 6};
int values1[7] = {5, 2, 3, 1, 4, 8, 6};
for(int i=0;i<8;i++)
myStack.push(values[i]);
myStack.push(values1[i]);
cout<<a.sum();
return 0;
}
另外,在这里您可以找到 queque.h 文件:https://pastebin.com/yg0CdCnd 和stack_base:https://pastebin.com/P6rzQJC1 谢谢,任何帮助都会很有用!
您需要将参数添加到主函数中,否则它将无法运行。
int main()
{
Stack<int> myStack;
App<int> a(myStack);
int values[7] = {5, 2, 3, 1, 4, 8, 6};
int values1[7] = {5, 2, 3, 1, 4, 8, 6};
for(int i=0;i<8;i++)
myStack.push(values[i]);
myStack.push(values1[i]);
cout<<a.sum();
return 0;
}
我没有检查你的代码是否正确,但这就是它不会执行的原因。
它不起作用,因为当您在此处创建App
对象时
App<int> a(myStack);
您正在通过复制myStack
为对象a
创建新的堆栈。将数据推送到变量myStack
不会更改对象a
中的Stack<T>
变量。
若要获得预期的结果,需要更改类App
,以便它应具有指向Stack<T>
数据成员的指针,例如:
Stack<T> * stack;
之后,更新构造函数以对应数据成员:
App(Stack<T> &stack) {
this->stack = &stack;
}
T substract(){
Stack<T> tempStack = *stack;
T sum=1;
for(int i=0; i<=stack->getTopLevel(); i++) {
sum-=tempStack.peek();
tempStack.pop();
}
return sum;
}
T sum(){
Stack<T> tempStack = *stack;
T sum=1;
for(int i=0; i<=stack->getTopLevel(); i++) {
sum+=tempStack.peek();
tempStack.pop();
}
return sum;
}
这应该可以做到。此外,您还在stack_base.h
文件中定义一个NMAX 10
,并在queque.h
文件中定义NMAX 5
。这限制了堆栈中元素的数量。就您的代码而言,queque.h
是不必要的。删除#include "queque.h"
行,并将要定义的行NMAX
更改为类似于stack_base.h
文件中#define NMAX 20
的内容。这样myStack
可以包含 20 个元素。您的主函数在末尾应如下所示:
int main(){
Stack<int> myStack;
App<int> a(myStack);
int values[7] = {5, 2, 3, 1, 4, 8, 6};
int values1[7] = {5, 2, 3, 1, 4, 8, 6};
for(int i=0; i<8; i++) {
myStack.push(values[i]);
myStack.push(values1[i]);
}
cout<<a.sum()<<endl;
return 0;
}
应显示 59,这比将sum
变量初始化为 1 以来元素的总和多 1。
你对sum()
和subtract()
的实现是有缺陷的。你根本不应该提到getTopLevel
。它在链接头文件中定义为内部数组中堆栈顶部项的索引。这是Stack
的实现细节,实际上不应该是公共接口的一部分。
相反,我建议您按预期使用Stack
- 通过将元素推到其上,然后根据需要弹出顶部元素。
例如
T sum()
{
Stack<T> tempStack = stack;
T sum = 0;
while (!tempStack.isEmpty())
{
sum += tempStack.pop();
}
return sum;
}
- 对象接收堆栈溢出异常 c++ 的排序向量
- 对象向量是否在堆或堆栈上分配C++?
- 在C++中使用队列和堆栈对 2 个向量进行加减
- 是否可以在堆栈上创建向量
- 堆栈在函数中弹出仍然显示在主函数中。调用不应该通过引用给定的向量吗
- 附加到具有非动态分配堆栈的向量
- 如何正确打印堆栈的向量
- 从分配在堆栈上的对象指针的向量中删除元素
- 链表与动态数组用于使用向量类实现堆栈
- 向量的向量,堆与堆栈(C++)
- 制作数组堆栈和向量的二维数组
- 将向量从堆栈复制到堆上
- 堆栈分配的向量如何在 C++ 中扩展
- 存储在对象向量上的基于堆栈的指针具有很长的使用寿命
- C++向量的堆栈分配
- 在C++中,是在堆栈或堆上的函数中创建的向量或映射
- 为什么存储在 STL 向量中的堆栈分配元素C++即使超出范围也仍然处于活动状态
- 我怎样才能实现堆栈的向量
- 为什么这不会导致堆栈溢出?其中是存储的全局向量(堆栈或堆)
- 我如何修复这段代码,使它不会pop_back或back()如果向量/堆栈是空的