在C ++中使用队列和堆栈添加和减少2个向量

时间:2018-03-27 09:19:13

标签: c++ stack queue

我的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谢谢,任何帮助都会有用!

3 个答案:

答案 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。