Я должен решить упражнение о стеках в 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 e e j
двойной 4 2,78 3,73 4,12 31,92
output.txt:
32 12 8 7 4
j d e 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;
}
}