我的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谢谢,任何帮助都会有用!
答案 0 :(得分:2)
您需要在主函数中添加parantheses,否则它将无法运行。
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;
}
我没有检查你的代码是否正确,但这就是为什么它不会执行的原因。
答案 1 :(得分:0)
您对select top 10 [groups].[name],
[groups].[id],
SUM(users.points) as points
from [groups] inner join [users] on [groups].[id] = [users].[group_id]
group by [groups].[id], [groups].[name], [points]
order by [points] desc
和class Approxalumni():
def __init__(self, year_est, currnt_intake):
self.year_est=year_est
self.currnt_intake=currnt_intake
t1 = PrettyTable(['Established year', "<1960", "1960-1980", "1980-2000", "2000-2010", "2010-2018"])
t1.add_row(["", "10%", '10%', '20%', '50%', '100%'])
if year_est<=1960:
t1.add_row(['',abs((currnt_intake/100)*10),'','','',''])
print(t1)
s1= (abs((currnt_intake/100)*10))
print("Total Approximate alumni strength is:"+ str(s1))
else:
pass
class Reg_approx(Approxalumni):
def reg(self):
t2= PrettyTable(['Approximate Registration', "Year-1", "Year-2", "Year-3", "Year-4", "Year-5"])
#t2.add_row(["", 1%((Approxalumni.s1)/100), '10%', '20%', '50%','100%'])
#t2.add_row(["", 1 % ((Approxalumni.s4) / 100), '10%', '20%', '50%', '100%'])
print(t2)
Approxalumni(
year_est=int(input("Enter Established year of the institute:")),
currnt_intake=int(input("enter current intake of Institute:"))
)
的实施存在缺陷。你根本不应该提到sum()
。它在链接头文件中定义为内部数组中堆栈顶部项的索引。这是subtract()
的实现细节,不应该是公共接口的一部分。
相反,我建议您按预期使用getTopLevel
- 通过将元素推送到其上,然后根据需要弹出关闭顶部元素。
e.g。
Stack
答案 2 :(得分:0)
它不起作用,因为在此处创建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。