我正在为辅助项目构建一个小的模板堆栈类,它似乎工作正常。但是,当我用字符串尝试时,它似乎不起作用。我没有编译错误或警告。我只是没有输出。我对C ++有点生疏,但我没想到会遇到一个看起来如此简单的问题。
我的主要功能(用于测试):
#include <iostream>
#include <fstream>
#include <string>
#include "myStack.h"
int main()
{
bool repeat = true;
int option = -1;
std::cout << "Option (1 - String | 2 - Integer) : ";
std::cin >> option;
std::cout << "\n";
switch (option)
{
case 1:
{
myStack<std::string> stringStack;
stringStack.push("!");
stringStack.push("there");
stringStack.push("Hello");
stringStack.show();
break;
}
case 2:
{
myStack<int> intStack;
intStack.push(3);
intStack.push(2);
intStack.push(1);
intStack.show();
break;
}
default:
break;
}
std::cout << "\n";
return 0;
}
我的堆栈类的相关部分:
#pragma once
template <typename T>
class myStack
{
private:
T *elements;
size_t capacity;
public:
myStack();
T top();
size_t size();
void push(T pushed);
void pop();
bool isEmpty();
void show(std::ostream &out = std::cout);
};
template <typename T>
myStack<T>::myStack()
{
this->elements = NULL;
this->capacity = 0;
}
template <typename T>
void myStack<T>::push(T pushed)
{
this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
this->elements[this->capacity] = pushed;
this->capacity++;
}
template<typename T>
void myStack<T>::show(std::ostream &out)
{
for (int i = this->capacity - 1; i >= 0; i--)
{
out << this->elements[i] << std::endl;
}
}
答案 0 :(得分:3)
的使用
this->elements = (T *)realloc(this->elements, (this->capacity + 1) * sizeof(T));
this->elements[this->capacity] = pushed;
管理std::string
数组是不正确的。使用realloc
分配内存是可以的。但是,它不能正确初始化对象。第二行是未正确初始化对象的原因。
如果允许您使用std::vector
,请使用它。
template <typename T>
class myStack
{
private:
std::vector<T> elements;
...
};
然后,可以将capacity
替换为elements.size()
。
push
可以简化为:
template <typename T>
void myStack<T>::push(T pushed)
{
this->elements.push_back(pushed);
}
您还必须相应地更新show()
。