• 04--STL序列容器(Stack和Queue)


    总括:

    stack和queue不支持迭代
    stack和queue是容器适配器,由容器deque实现

     一:栈Stack

    (一)栈的简介

    stack是堆栈容器,是一种“先进后出”的容器。
    stack是简单地装饰deque容器而成为另外的一种容器。

    (二)栈的默认构造

    stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT; 
    
    stack <int> stkInt;            //一个存放int的stack容器。
    
    stack <float> stkFloat;     //一个存放float的stack容器。
    
    stack <string> stkString;     //一个存放string的stack容器。                         
    
    //尖括号内还可以设置指针类型或自定义类型。

    (三)栈的出栈进栈操作push和pop《重点》

    stack.push(elem);   //往栈头添加元素
    
    stack.pop();   //从栈头移除第一个元素

    补充:top()返回栈头数据(但是数据不出栈),所以top和pop联用

    (四)栈的拷贝构造及赋值

    stack(const stack &stk);                //拷贝构造函数
    
    stack& operator=(const stack &stk);      //重载等号操作符

    (五)数据遍历:stack和queue不提供迭代器,所以想要获取数据,必须依次取走数据

        stack<int> st;
    
        st.push(5);
        st.push(4);
        st.push(3);    //栈底 5 4 3 栈头
        
        while (!st.empty())
        {
            cout << st.top() << " ";
            st.pop();
        }
        cout << endl;

    (六)stack大小获取

    stack.empty();   //判断堆栈是否为空
    stack.size();            //返回堆栈的大小

    (七)性能测试

    #include <stack>
    namespace jj06
    {
        void test_stack(long& s_size)
        {
            cout << "
    test_stack()*******" << endl;
    
            /******变量声明:数组初始********/
            char buf[10];
    
            /******变量声明:vector初始********/
            stack<string> stk;
    
            /******变量声明:记录时间********/
            clock_t timeStart = clock();    //开始时间
            for (long i = 0; i < s_size; i++)
            {
                try
                {
                    snprintf(buf, 10, "%d", rand());
                    stk.push(string(buf));
                }
                catch (exception& e)
                {
                    cout << e.what() << endl;
                    cout << "Max_size:" << i << endl;
                    abort();    //终止
                }
            }
    
            cout << "inti stack use milli-seconds:" << (clock() - timeStart) << endl;    //获取初始化数组耗时
            cout << "stack.size:" << stk.size() << endl;    //获取stack大小
            cout << "stack.top:" << stk.top() << endl;    //获取stack栈顶元素
            stk.pop();    //出栈一个元素
            cout << "stack.size:" << stk.size() << endl;    //获取stack大小
            cout << "stack.top:" << stk.top() << endl;    //获取栈顶尾元素
        }
    }

    二:队列Queue

    (一)queue简介

    queue是队列容器,是一种“先进先出”的容器。
    queue是简单地装饰deque容器而成为另外的一种容器。

    (二)queue对象的默认构造

    queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;  如:
    
    queue<int> queInt;            //一个存放int的queue容器。
    
    queue<float> queFloat;     //一个存放float的queue容器。
    
    queue<string> queString;     //一个存放string的queue容器。             
    
    //尖括号内还可以设置指针类型或自定义类型。

    (三)queue入队出队操作push和pop《重点》

    queue.push(elem);   //往队尾添加元素
    
    queue.pop();   //从队头移除第一个元素

    (四)queue的数据获取back和front《通常和上面联用》

    queue.back();   //返回最后一个元素
    queue.front();   //返回第一个元素

    (五)queue队列大小获取

    queue.empty();   //判断队列是否为空
    queue.size();          //返回队列的大小

    (六)性能测试

    #include <queue>
    namespace jj07
    {
        void test_queue(long& q_size)
        {
            cout << "
    test_queue()*******" << endl;
    
            /******变量声明:数组初始********/
            char buf[10];
    
            /******变量声明:vector初始********/
            queue<string> que;
    
            /******变量声明:记录时间********/
            clock_t timeStart = clock();    //开始时间
            for (long i = 0; i < q_size; i++)
            {
                try
                {
                    snprintf(buf, 10, "%d", rand());
                    que.push(string(buf));
                }
                catch (exception& e)
                {
                    cout << e.what() << endl;
                    cout << "Max_size:" << i << endl;
                    abort();    //终止
                }
            }
    
            cout << "inti queue use milli-seconds:" << (clock() - timeStart) << endl;    //获取初始化数组耗时
            cout << "queue.size:" << que.size() << endl;    //获取stack大小
            cout << "queue.front:" << que.front() << endl;    //获取stack栈顶元素
            cout << "queue.back:" << que.back() << endl;    //获取stack栈顶元素
            que.pop();    //出栈一个元素
            cout << "queue.size:" << que.size() << endl;    //获取stack大小
            cout << "queue.top:" << que.front() << endl;    //获取栈顶尾元素
            cout << "queue.back:" << que.back() << endl;    //获取stack栈顶元素
        }
    }

  • 相关阅读:
    [转]顶点数据压缩
    [转]将某个Qt4项目升级到Qt5遇到的问题
    「05」回归的诱惑:一文读懂线性回归
    AI漫谈:我们距离实现《庆余年》里的五竹叔机器人还有多远?
    “木兰”去哪儿了?被全国700所中小学引入的国产编程语言“木兰”,为何在官网删除了下载链接
    有哪些让人相见恨晚的Python库(一)
    2019年最值得关注的AI领域技术突破及未来展望
    为什么样本方差的分母是n-1?为什么它又叫做无偏估计?
    「04」机器学习、深度学习需要哪些数学知识?
    「03」机器学习、深度学习该怎样入门?
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10788640.html
Copyright © 2020-2023  润新知