#include <iostream>
#include <string>
//简单演绎栈的操作原理:压栈和弹栈
template <class T>
class Stack//栈类
{
public:
Stack(int size)
{
this->size = size;
memset(array, 0, size * sizeof(array));//将数组的值标记为0
}
~Stack()
{
delete array;
}
void push(T value)//压栈
{
array[point - 1] = value;
point++;
}
void PushShow()//压栈情况展示
{
std::cout << "压栈" << std::endl;
for (int i = size - 1; i >= 0; i--)
{
if (!array[i])//判断数组值是否标记为0
{
std::cout << "|" << " " << "|" << std::endl;
}
else
{
std::cout << "|" << array[i] << "|" << std::endl;
std::cout << " - " << std::endl;
}
}
}
void pop()//弹栈
{
std::cout << "弹栈" << std::endl;
for (int i = 0; i < size; i++)
{
if (!array[i])//判断数组值是否标记为0
{
std::cout << "|" << " " << "|" << std::endl;
std::cout << " - " << std::endl;
}
else
{
std::cout << "|" << array[i] << "|" << std::endl;
std::cout << " - " << std::endl;
}
}
}
private:
int size;
T *array = new T[size];//栈的内存数组
int point = 1;//栈的指针
};
int main()
{
Stack<int>stack(10);
stack.push(1);
stack.PushShow();
stack.push(2);
stack.PushShow();
stack.push(3);
stack.pop();
return 0;
}
结果:
你的栈有问题。构造函数里面是赋值不是初始化。初始化发生在初始化列表中,你没有给size初值,那么size是随机值,然后你拿着一个随机值去申请一段空间。
给你改好了
#include <iostream>
#include <string>
#include <cstring>
//简单演绎栈的操作原理:压栈和弹栈
template <class T>
class Stack //栈类
{
public:
Stack(int size)
{
this->size = size;
array = new T[size];
memset(array, 0, size * sizeof(T)); //将数组的值标记为0
}
~Stack()
{
delete [] array;
}
void push(T value) //压栈
{
array[point - 1] = value;
point++;
}
void PushShow() //压栈情况展示
{
std::cout << "压栈" << std::endl;
for (int i = size - 1; i >= 0; i--)
{
if (!array[i]) //判断数组值是否标记为0
{
std::cout << "|"
<< " "
<< "|" << std::endl;
}
else
{
std::cout << "|" << array[i] << "|" << std::endl;
std::cout << " - " << std::endl;
}
}
}
void pop() //弹栈
{
std::cout << "弹栈" << std::endl;
for (int i = 0; i < size; i++)
{
if (!array[i]) //判断数组值是否标记为0
{
std::cout << "|"
<< " "
<< "|" << std::endl;
std::cout << " - " << std::endl;
}
else
{
std::cout << "|" << array[i] << "|" << std::endl;
std::cout << " - " << std::endl;
}
}
}
private:
int size;
T *array;
int point = 1; //栈的指针
};
int main()
{
Stack<int> stack(10);
stack.push(1);
stack.PushShow();
stack.push(2);
stack.PushShow();
stack.push(3);
stack.pop();
return 0;
}