• Stack实现方式


    Stack的一种实现

    /*
     * stack实现:利用vector
     
    */
    #include <iostream>
    #include <vector>
    #include <string>

    using std::cout;
    using std::endl;
    using std::vector;
    using std::string;
    using std::ostream;

    template <class T>
    class Stack{
        public:
            Stack(int cap=0){
                if(cap)
                    _stack.reserve(cap);
            }
            bool pop(T &vaulue);
            bool push(T  value);
            bool full();
            bool empty();
            void display();
            int size();
        private:
            vector<T> _stack;
    };
    template<class T>
    inline int Stack<T>::size(){
        return _stack.size();
    }
    template<class T>
    inline bool Stack<T>::empty(){
        return _stack.empty();
    }
    template<class T>
    inline bool Stack<T>::full(){
        return _stack.max_size()==_stack.size();
    }
    template<class T>
    bool Stack<T>::pop(T &value){
        if(empty())
            return false;
        value=_stack.back();
        _stack.pop_back();
        cout<<"Stack:pop()"<<value<<endl;
        return true;
    }
    template<class T>
    bool Stack<T>::push(T value){
        if(full())
            return false;
        _stack.push_back(value);
        cout<<"Stack:push()"<<value<<endl;
        return true;

    }
    template<class T>
    void Stack<T>::display(){
        if(size()==0) { cout<<"(0)"<<endl;
        }
        else{
            cout<<"("<<size()<<")(bot:";
            for(int i=0;i<size();++i)
                cout<<_stack[i]<<" ";
            cout<<":top)"<<endl;
        }
    }
    class MyTest{
        friend ostream& operator<<(ostream& os,MyTest& mt){
            os<<mt.str;
            return os;
        }

        public:
            MyTest(string s=""):str(s){
                cout<<"constructor"<<endl;
            };
        private:
            string str;
    };
    int main()
    {
    //    Stack<int> stack( 32 );
    //    stack.display();
    //    for ( int ix = 1; ix < 51; ++ix )
    //    {
    //        if ( ix%2 == 0 )
    //            stack.push( ix );
    //        if ( ix%5 == 0 )
    //            stack.display();
    //        if ( ix%10 == 0) {
    //            int dummy;
    //            stack.pop( dummy ); stack.pop( dummy );
    //            stack.display();
    //        }
    //    }
         Stack<MyTest> stack(10);
         stack.display();
         stack.push(MyTest("hello"));
         stack.display();
        return 0;
    }
  • 相关阅读:
    devexpress LayoutControl控件里面的内边距的消除
    NPOI 单元格高度和宽度的值设置解释
    NPOI 设置合并后的单元格的边框的解决方法
    ajax中参数traditional的作用
    kendo ui 遇到问题 Invalid or unexpected token的原因和解决方法
    kendo ui grid重置功能,重置所有数据
    mysql 8.*版本部署上以后用navcat能连上,但是系统连不上
    mysql 5.7的my.ini的位置在隐藏文件夹“ProgramData”下面
    获取kendo treeView上的选中项
    mysql按30分钟进行分组
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2653812.html
Copyright © 2020-2023  润新知