我的C ++代码有问题。我需要使用一些头文件逐个组件添加和减去2个数学向量,但是我还可以实现其他一些功能。问题是我的程序没有任何错误,但是没有执行...例如,如果我有向量A(3,5)和B(1,7),则结果应为:A + B =(4 ,12)和AB =(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谢谢,任何帮助将非常有用!
最佳答案
它不起作用,因为在此处创建App
对象时
App<int> a(myStack);
您正在通过复制
a
为对象myStack
创建新的堆栈。将数据推送到变量myStack
不会更改对象Stack<T>
内部的a
变量。为了获得预期的结果,您需要更改您的类
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;
}
那应该做。另外,您还要在
NMAX 10
文件中定义stack_base.h
,在NMAX 5
文件中定义queque.h
。这限制了堆栈中元素的数量。据您的代码暗示,queque.h
是不必要的。删除#include "queque.h"
行,并将要定义NMAX
的行更改为#define NMAX 20
文件中的stack_base.h
之类的内容。这样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;
}
由于将
sum
变量初始化为1,因此应该显示59,它比元素的总和多1。