zoukankan      html  css  js  c++  java
  • STL学习笔记--特殊容器

    容器配接器

    (1) stack
    栈 后进先出(LIFO), 头文件#include<stack>

    template<class _Ty,
    class _Container = deque<_Ty> >
    class stack
    {	// LIFO queue implemented with a container
    ...
    

    可以看出,stack内部缺省使用deque实现。可以使用任何序列式容器来支持stack,只要支持back(),push_back操作。可以使用list或vector实现。
    stack核心接口:
    push 压栈
    top 返回栈顶元素,并不移除
    pop 出栈 ,移除下一个元素,并不将它返回.
    注:如果stack内没有元素,执行top pop会导致为定义的行为,要使用empty()或size()来检验是否为空。
    stack运用实例:

    //stack 栈  后进先出
    stack<int> st;
    st.push(1); //压栈
    st.push(3);
    st.push(8);
    st.push(-10);
    
    cout << "
    Stack:";
    while (!st.empty())
    {
    	cout << st.top() << " ";	//取栈顶元素
    	st.pop(); //出栈
    }
    

    (2) queue
    队列 先进先出(FIFO), 头文件#include<queue>
    queue内部也采用deque实现 支持front() back() push_back pop_front()操作的任何序列式容器都可以实现queue,如list。
    queue接口:
    push() 入队
    front() 返回队首元素
    pop 出队,移除元素
    queue运用实例:

    //queue 队列 先进先出
    queue<int,list<int> > listQueue; //使用list实现queue
    listQueue.push(1); //入队
    listQueue.push(3);
    listQueue.push(8);
    listQueue.push(-10);
    
    cout << "
    Queue:";
    while (!listQueue.empty())
    {
    	cout << listQueue.front() << " ";//取队首元素
    	listQueue.pop();//出队
    }
    

    (3) priority_queue 优先队列
    优先级队列的元素根据优先级读取,即优先级队列的元素已按排序准则排序,缺省的排序准则operator<.

    template<class _Ty,
    class _Container = vector<_Ty>,
    class _Pr = less<typename _Container::value_type> >
    class priority_queue
    {	// priority queue
    ...
    

    接口:
    push 入队
    top 取下一个元素
    pop 出队,移除元素

    Bitsets

    bitset造出一个内含位(bits)或boolean值且大小固定的array。当需要管理各式标志(flags),并以标识的组合来表现变量时,就可以运用bitset。
    头文件#include<bitset>

    template<size_t _Bits>
    class bitset
    ...
    

    注:这里 template参数并不是一个型别,而是一个不带负号的整数。
    运用实例:

    enum Color{
    	red,
    	yellow,
    	green,
    	blue,
    	white,
    	black,
    	numColors
    };
    
    bitset<numColors> usedColors;
    usedColors.set(red);//置位
    usedColors.set(yellow);
    
    cout << "
    bitfield: " << usedColors;
    cout << "
    number of used colors: " << usedColors.count();	//返回"位值为1"的个数
    cout << "
    bitfield of unused colors: " << ~usedColors;
    
    if (usedColors.any())	//判断是否有任何位被值1
    {
    	cout <<"
    use colors!";
    }
    if (usedColors.test(red)) //判断该位是否被设立
    {
    	cout << "
    use red color!";
    }
    usedColors.set(); //所有位设为true
    usedColors.reset(); //所有位设为false
  • 相关阅读:
    注释神器
    Q币直充-迅银渠道商(php 面向对象类)
    rsync 同步多台服务器项目目录
    wdcp 打开网页显示 Apache 2 Test Page powered by CentOS -- 来自辉哥博客
    elasticsearch批量修改,批量更新某个字段
    Ik分词器没有使用---------elasticsearch-analysis-ik 5.6.3分词问题
    spring-boot-starter-data-elasticsearch 整合elasticsearch 5.x详解
    FastJson--SerializerFeature.PrettyFormat 如何实现格式化源码查看
    由Premature end of Content-Length delimited message body因发的问题排查
    JVM的YoungGC日志查看
  • 原文地址:https://www.cnblogs.com/cmranger/p/4729814.html
Copyright © 2011-2022 走看看