封装顺序栈(模拟实现stack)

来源:互联网 发布:心动网络 校招 编辑:程序博客网 时间:2024/05/16 12:13

一。我们先来看看库函数stack中有哪些函数

这里写图片描述
我们看到函数有

@1.empty()函数:

函数原型:bool empty ( ) const;判断栈是佛为NULL;true if the container size is 0, false otherwise.

@2.size()函数:

函数原型:size_type size ( ) const;返回栈中有用元素个数,size_t类型

@3.top()函数:

函数原型:value_type& top ( ); const value_type& top ( ) const;
拿出栈顶元素;

@4.push()函数:

函数原型:void push ( const T& x );
元素入栈

@5.pop()函数:

函数原型:void pop ( );
栈顶元素出栈

二,自己模拟实现stack

#include<iostream>using namespace std;template<class T>class Stack{public:    Stack()        : _array(new T[3])        , _size(0)        , _capacity(3)    {}    void Push(const T& data)    {        _CheckCapacity();        _array[_size] = data;        _size++;    }    void Pop()    {        if (Empty())        _size--;    }    T& Top()    {        return _array[_size - 1];    }    const T& Top()const    {        return _array[_size - 1];    }    size_t Size()const    {        return _size;    }    bool Empty()const    {        return _size!=0?true:false;    }    ~Stack()    {        if (_array)            delete[] _array;    }private:    void _CheckCapacity()    {        if (_size == _capacity)        {            T* temp = new T[2 * _size + 3];            //swep(_array, temp);            for (int i = 0; i < _size; i++)            {                temp[i] = _array[i];            }            delete[] _array;            _array = temp;            temp = NULL;            _capacity = 2 * _size + 3;        }    }private:    T* _array;    size_t _capacity;    size_t _size;};int main(void){    Stack<int> array;    array.Push(1);    array.Push(2);    array.Push(3);    array.Push(4);    array.Size();    cout<<array.Empty() << endl;    array.Pop();    cout << array.Top() << endl;    array.Size();    return 0;}