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 << "\ntest_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 << "\ntest_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栈顶元素
    }
}

 

posted @ 2019-04-29 09:52  山上有风景  阅读(385)  评论(0编辑  收藏  举报