STL库day02

1、queue队列容器

    头文件:#include <queue>

    链式队列

    不支持运算符、没有迭代器、只有无参构造合拷贝构造

    back    获取队尾元素

    front   获取队头元素

    empty   判断是否队空

    push    入队

    pop     出队

    size    获取队列元素

2、stack栈容器

    头文件: #include <stack>

    链式栈

    不支持运算符、没有迭代器、只有无参构造合拷贝构造

    push    入栈

    pop     出栈

    top     获取栈顶元素

    size    获取栈元素数量

    empty   判断是否栈空

3、priority_queue 优先队列容器

    头文件:#include <queue>

    优先队列,该队列会对入队的数据进行排序,默认元素值越大,优先级越高,越先出队

    注意:存储的元素必须支持 < 运算符

          如果类型不支持,需要手动实现 < 运算符函数,可以根据需要在该函数中修改优先级

    push    入队

    pop     出队

    top     获取队头元素

    size    获取队列元素数量

    empty   判断是否队空

4、Double-ended queues双向队列容器

    头文件:#include <deque>

    双向队列容器,用法与vector一模一样,只是底层采用双向链表存储数据

    区别是vector是顺序表

    优点: 比vector节约内存

    缺点: 速度要比vector慢

    支持的运算符:

    []  可以像向量一样"随机访问"元素

    = == != < > <= >=   比较规则与vector一致

    注意:虽然可以像随机访问一样去访问元素,但是底层是不支持随机访问的,本质上[]运算符还是遍历访问,因此速度比vector慢

        其实就是在vector的基础上增加了双端操作的功能而已

5、set容器

    头文件:#include <set>

    集合容器,特点是元素不重复,会对元素自动排序,因此它存储的元素必须支持 < 运算符,只能迭代器遍历访问

    底层:采用红黑树实现的

    构造函数:

        只有无参构造合拷贝构造

    运算符:

        与list一致

       

        size_type count( const key_type& key);

        功能: 获取集合中key元素的数量,在set中只能是1或0,意义不大

        pair<iterator, iterator> equal_range( const key_type& key );

        功能: 查找set容器中值为key的元素位置范围,返回一个数据对[start迭代器,end迭代器)

        因为set数据不重复,该函数意义不大

        iterator find( const key_type& ket );

        功能: 查找set中值为key的元素位置,如果找到返回该元素的迭代器,否则返回end()的值

        pair<iterator,bool> insert( const TYPE& val );

        功能:向容器中插入一个数据

        返回一个键值对,成功(迭代器,true),否则(end,false)

        key_compare key_comp() const;

        功能:返回容器中元素的比较方法 使用该方法对该类型的数据进行<比较

        set<T> set;

        set<int>::key_compare cmp = s.key_comp();

        cout << cmp(T t1,T t2) << endl;

        iterator lower_bound( const key_type& key );

        功能: 返回一个最小的大于等于key元素的迭代器

        iterator upper_bound( const key_type& key );

        功能: 返回一个最小的大于key元素的迭代器

        value_compare value_comp() const;

        功能:返回容器中元素的比较方法 使用该方法对该类型的数据进行<比较

        set<T> set;

        set<int>::value_compare cmp = s.value_comp();

        cout << cmp(T t1,T t2) << endl;

6、multiset

    头文件:#include <set>

    多重集合容器,特点是元素可以重复,依然会对元素自动排序,因此它存储的元素也必须支持 < 运算符,只能用迭代器遍历

    底层:红黑树

    pair<iterator, iterator> equal_range( const key_type& key );

    功能: 查找multiset容器中值为key的元素位置范围,返回一个数据对[start迭代器,end迭代器)

7、map容器

    头文件:#include <map>

    映射容器,是存储了由 (key/value)组成的元素(字典、键值对),要求键值对中的key不能重复,而且会根据key进行排序

    要求key类型必须支持 < 运算符

    key和value是一一对应的,可以根据key来访问value

    一般会在里面存储频繁需要查找的数据,因为map的查找速度特别快(redis内存数据库)

    底层采用红黑树存储数据,查找效率极高

    构造函数:

    map( iterator start, iterator end );

    功能: 使用一组pair<key/value>数据构造映射容器

    map( iterator start, iterator end, const key_compare& cmp );

    功能: 使用一组pair<key/value>数据构造映射容器,并提供key的比较函数

    支持[]运算符:

        [] 通过使用key作为下标

        即可以访问key的键值对,也可以给该键值对赋值(插入)

        m[key] = value;

    iterator insert( iterator i, const TYPE& pair );

    功能:在指定位置插入一个键值对(pair类型)

    void insert( input_iterator start, input_iterator end );

    功能:向映射容器插入一组数据(pair类型)

    pair<iterator,bool> insert( const TYPE& pair );

    功能:向映射容器插入一个键值对,返回插入位置以及结果

    key_compare key_comp() const;

    功能: 返回map容器中key的比较函数,该函数可以针对相同类型的键值对进行key的比较

    value_compare value_comp() const;

    功能: 返回map容器中value的比较函数,该函数可以针对相同类型的键值对进行value的比较

8、multimap

    #include <map>

    多重映射容器

    使用方法与map一致,但不同的是它的key可以对应多个value

    所以无法支持[]运算符

通过迭代器删除元素时,需要注意的问题:

    对于关联容器(set\multiset\map\multimap),删除当前iterator时,仅仅会让当前的迭代器失效

    可以在erase时,递增当前的iterator可以连续删除 set>erase(it++)

    因为他们底层都是红黑树实现,因此插入、删除一个节点不会导致其他节点无法访问

    对于顺序容器(vector),当删除当前的iterator会使后面的元素的iterator失效,因为它底层是连续分配的内存

    因此不能 vector.erase(it++)

    可以通过返回值拿到下一个元素的迭代器,重新赋值给it即可 it = vector.erase(it);

9、bitset容器

    #include <bitset>

    位集合容器,是一种封装了各种位运算操作的数据结构

    支持的运算符:

        != == &= ^= |= ~ <<= >>= []

    成员函数:

        bool any()

        功能: 有任意一位二进制为1,返回真

        size_type count();

        功能: 返回二进制位为1的位数

        bitset<N>& flip();

        功能:所有二进制位求反

        bitset<N>& flip( size_t pos );

        功能:指定二进制位求反

        bitset<N>& reset();

        功能:把所有二进制位置零

        bitset<N>& reset( size_t pos );

        功能:把指定二进制位置零

        bitset<N>& reset( size_t pos, int val=1 );

        功能: 把指定二进制位置1

        size_t size();

        功能:计算二进制的位数

        bool test( size_t pos );

        功能: 测试某个二进制位是0还是1

        string to_string

        功能:把二进制转换成字符串

        unsigned long to_ulong();

        功能:把二进制转换为 unsigned longc

    注意: bitset在C++中用处不大,但是在嵌入式开发中比较

    为什么STL中有很多容器底层采用红黑树?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值