zoukankan      html  css  js  c++  java
  • C++STL(vector,map,set,list,bitset,deque)成员函数整理

     补充:

    vector 删除指定元素:

    vec.erase(remove(vec.begin(), vec.end(), val),
               vec.end());
    remove()返回的是删除后的尾部迭代器,必须调用erase()显式地删除其后的元素。

    erase()删除迭代器指向的元素。

    eg.

      vec.erase(remove(vec.begin(),vec.end(), i),vec.end());
      vec.erase(find(vec.begin(),vec.end(), i));

    --------------------------------------------------------------------------------------------------------------------------------------------补充

    bitset

    bitset所在的头文件<bitset>

    命名空间std

    Attention

    唯一需要注意的是,bitset<>模板类虽然重载了中括号运算符,bs[0]表示的是将该数值转换为二进制时的最末尾元素,而非首位(其意义和数组并不相同)。

    std::bitset<8> bs;

    //bs[0] = 1;            // 0000 0001

    //bs[7] = 1;            // 1000 0000

    初始化:

    默认无参构造

    初始化全部位为0

    -十进制或者16进制数值

    std::bitset<8> bs(7);

    bs.to_string()  // 0000 0111

    std::bitset<8> bs(0x07);

    bs.to_string()  // 0000 0111

    方法:

    bitset的操作

    成员函数

    函数功能

    bs.any()

    是否存在值为1的二进制位

    bs.none()

    是否不存在值为1的二进制位
    或者说是否全部位为0

    bs.size()

    位长,也即是非模板参数值

    bs.count()

    值为1的个数

    bs.test(pos)

    测试pos处的二进制位是否为1
    与0做或运算

    bs.set()

    全部位置1

    bs.set(pos)

    pos位处的二进制位置1
    与1做或运算

    bs.reset()

    全部位置0

    bs.reset(pos)

    pos位处的二进制位置0
    与0做或运算

    bs.flip()

    全部位逐位取反

    bs.flip(pos)

    pos处的二进制位取反

    bs.to_ulong()

    将二进制转换为unsigned long输出

    bs.to_string()

    将二进制转换为字符串输出

    ~bs

    按位取反
    效果等效为bs.flip()

    os << b

    将二进制位输出到os流
    小值在右,大值在左

    一些高级用法

    首先看一个简单实例:

    "1000 0000" - > 1

    "1000 1000" - > 17

    如何实现2进制向10进制的转换,而且二进制的表示形式是一种逆序的形式,即低位在前。

    int bin2dec(const string& bin)

    {

        std::bitset<8> bs(string(bin.rbegin(), bin.rend()));

        return bs.to_ulong();

    }

    这里回顾开头引用中的话,bitset的强大之处不在于表示一个二进制的数值,而是表达一种情况数,一个二进制位可以表示两种情况,两个二进制位可以表示4种状况数,3个二进制位可以表达8种状况数,等等。

    --------------------------------------------------------------------------------------------------------------------------------------------补充

    deque:

    头文件:deque

    名称空间:std

    初始化:deque<数据类型> 变量名;

    基本操作:

    assign(beg,end)                                       将[beg,end)区间中的数据赋值给que。

    assign(n,elem)                                         将n个elem的拷贝赋值给que。

    at(idx)                                                       传回索引idx所指的数据,如果idx越界,抛出out_of_range。

    back()                                                       返回容器的最后一个元素的引用。若que为空,则该操作未定义。

    begin()                                                     传回迭代器中的第一个数据地址。

    clear()                                                      移除容器中所有数据。

    empty()                                                    判断容器是否为空。

    end()                                                        返回一个迭代器,它指向容器que的最后一个元素的下一位置。

    erase(pos)                                               删除pos位置的数据,传回下一个数据的位置。

    erase(beg,end)                                        删除[beg,end)区间的数据,传回下一个数据的位置。

    front()                                                      返回容器que的第一个元素的引用。如果que为空,则该操作为空。

    insert(pos,elem)                                      在pos位置插入一个elem拷贝,传回新数据位置

    insert(pos,n,elem)                                   在pos(迭代器)位置插入>n个elem数据。无返回值

    insert(pos,beg,end)                                 在pos位置插入在[beg,end)区间的数据。无返回值

    max_size()                                              返回容器que可容纳的最多元素个数。

    pop_back()                                              删除最后一个数据。

    pop_front()                                              删除头部数据。

    push_back(elem)                                    在尾部加入一个数据。

    push_front(elem)                                    在头部插入一个数据。

    rbegin()                                                   返回一个逆序迭代器,它指向容器que的最后一个元素。

    rend()                                                      返回一个逆序迭代器,它指向容器que的第一个元素的前一个位置。

    resize(num)                                             重新指定队列的长度。

    size()                                                       返回容器中实际数据的个数。

    swap(que2)                                             交换容器que和que2中的所有元素。

    swap(que1,que2)                                    交换容器que1和que2中的所有元素。

  • 相关阅读:
    CIA泄露资料分析(黑客工具&技术)—Windows篇
    包学会之浅入浅出Vue.js:结业篇
    包学会之浅入浅出Vue.js:升学篇
    包学会之浅入浅出Vue.js:开学篇
    Manacher算法详解
    CSP-S 2019 游记
    洛谷 P3373 【模板】线段树 2
    AHOI 2009 维护序列
    洛谷 P4017 最大食物链计数
    洛谷 SP14932 LCA
  • 原文地址:https://www.cnblogs.com/langyao/p/6740507.html
Copyright © 2011-2022 走看看