有关在C ++中实现堆栈的问题

时间:2019-05-11 11:02:36

标签: c++ stack

我必须解决一个有关C ++中堆栈的练习。我需要实现一个Stack类,该类支持pop()和push()操作。我的输入是一个文件input.txt,其中包含100行。每行包含2 + N个元素:第一个是显示类型的字符串,第二个是int N,显示元素的数量。跟随N个元素。关于输出,必须以相反的顺序将元素写入到output.txt中。通用类型H可以是int,bool,double和char。 N是10到200之间的整数。

示例:

input.txt:

int 5 4 7 8 12 32

char 7 g h t a e d j

double 4 2.78 3.73 4.12 31.92

output.txt:

32 12 8 7 4

j a t h g

31.92 4.12 3.73 2.78

我为这个问题写了一个解决方案,编译成功,但是当我尝试运行程序时,终端给了我这个错误:

malloc():损坏的最大大小 中止

#include <iostream>
#include <fstream>

using namespace std;

template <typename T> class Stack {
private:
    int top;
    T *arrayStack;
    int size;

public:
    Stack(int len = 200) {
        arrayStack = new T(len);
        top = -1;
        size = len;
    }

    void push(T element) {
        if(top < size-1) {
            top++;
            arrayStack[top] = element;
        }
        else
            return;
    }

    T pop() {
        if(top == -1)
            return -1;
        else {
            top--;
            return arrayStack[top+1];
        }
    }
};

int main() {    
    int intero = 0;
    char carattere = '0';
    bool booleano = true;
    double virgola = 0.00;

    ifstream in("input.txt");
    ofstream out("output.txt");
    int n;
    string tipo;

    for(int i=0; i<100; i++) {
        in >> tipo;
        in >> n;
        if(tipo == "int") {
            Stack<int> pila(n);

            for(int i=0; i<n; i++) {
                in >> intero;
                pila.push(intero);
            }

            for(int i=0; i<n; i++)
                out << pila.pop() << " ";
        }
        else if(tipo == "char") {
            Stack<char> pila(n);

            for(int i=0; i<n; i++) {
                in >> carattere;
                pila.push(carattere);
            } 

            for(int i=0; i<n; i++)
                out << pila.pop() << " ";
        }
        else if(tipo == "bool") {
            Stack<bool> pila(n);

            for(int i=0; i<n; i++) {
                in >> booleano;
                pila.push(booleano);
            }

            for(int i=0; i<n; i++)
                out << pila.pop() << " ";

        }
        else if(tipo == "double") {
            Stack<double> pila(n);

            for(int i=0; i<n; i++) {
                in >> virgola;
                pila.push(virgola);
            }

            for(int i=0; i<n; i++)
                out << pila.pop() << " ";
        }
        out << endl;
    } 
}

1 个答案:

答案 0 :(得分:2)

使用new T[len]代替new T(len)

new T(len)创建一个T的实例,而T的构造函数将len作为参数。

new T[len]创建一个包含T个元素的len数组。