我必须解决一个有关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;
}
}
答案 0 :(得分:2)
使用new T[len]
代替new T(len)
。
new T(len)
创建一个T
的实例,而T的构造函数将len
作为参数。
new T[len]
创建一个包含T
个元素的len
数组。