• C++标准库(二)之容器


    Vector

    • 非更易性操作
    c.empty()    //返回容器是否为空
    c.size()    //返回目前元素的个数
    c.max_size()    //返回元素个数的最大可能量
    c.capacity()    //返回“不进行空间重新分配”条件下的元素最大容量
    c.reserve(number)    //如果容量不足,则进行扩大
    c.shrink_to_fit()    //降低容量
    
    • 元素访问
    c[idx]
    c.at(idx)    //如果元素访问越界,会抛出out_of_range的异常
    c.front()
    c.back()
    
    • 安插与移除
    c.push_back(elem)    //将一个elem的拷贝附加至容器末尾
    c.pop_back()    // 移除最后一个元素,但是不返回它
    c.insert(pos,elem)    //在iterator位置pos的前方插入一个elem拷贝,并返回新元素的位置
    c.insert(pos,n,elem)    //在iterator位置pos之前插入elem的n个拷贝,并返回第一个新元素的位置
    c.insert(pos,begin,end)    //在iterator位置pos之前插入区间[begin,end)中的所有元素,返回第一个新元素的位置
    c.insert(pos,initlist)    //在iterator位置pos之前插入初始化列表的一份拷贝,并返回第一个新元素的位置
    c.erase(pos)    //移除iterator位置pos上的元素,返回下一个元素的位置
    c.erase(begin,end)    //移除[begin,end)中的所有元素,返回下一个元素的位置
    c.resize(num)    //将元素的数量改为num,多出来的元素用default构造函数完成初始化
    c.resize(num,elem)    //将元素的数量改为num,多出的元素以elem的拷贝初始化
    c.clear()    //移除所有的元素
    

    Deque

    双端可变数组

    • 非更易性操作
    c.empty()    //返回容器是否为空
    c.size()    //返回目前元素的个数
    c.max_size()    //返回元素个数的最大可能量
    c.shrink_to_fit()    //降低容量
    c.front()
    c.back()
    c.begin()
    c.end()
    c.cbegin()
    c.cend()
    c.rbegin()
    c.rend()
    c.crbegin()
    c.crend()
    
    • 元素访问
    c[idx]
    c.at(idx)    //如果元素访问越界,会抛出out_of_range的异常
    c.front()
    c.back()
    
    • 安插与移除
    c.push_back(elem)    //将一个elem的拷贝附加至容器末尾
    c.pop_back()    // 移除最后一个元素,但是不返回它
    c.push_front(elem)    //将elem的拷贝插入容器头部
    c.pop_front()    //移除头部元素,但是并不返回它
    c.insert(pos,elem)    //在iterator位置pos的前方插入一个elem拷贝,并返回新元素的位置
    c.insert(pos,n,elem)    //在iterator位置pos之前插入elem的n个拷贝,并返回第一个新元素的位置
    c.insert(pos,begin,end)    //在iterator位置pos之前插入区间[begin,end)中的所有元素,返回第一个新元素的位置
    c.insert(pos,initlist)    //在iterator位置pos之前插入初始化列表的一份拷贝,并返回第一个新元素的位置
    c.erase(pos)    //移除iterator位置pos上的元素,返回下一个元素的位置
    c.erase(begin,end)    //移除[begin,end)中的所有元素,返回下一个元素的位置
    c.resize(num)    //将元素的数量改为num,多出来的元素用default构造函数完成初始化
    c.resize(num,elem)    //将元素的数量改为num,多出的元素以elem的拷贝初始化
    c.clear()    //移除所有的元素
    

    List

    双向队列

    • 非更易型操作
    c.empty()    //返回容器是否为空
    c.size()    //返回目前元素的个数
    c.max_size()    //返回元素个数的最大可能量
    
    • 元素访问
    c.front()    //返回头部
    c.back()    //返回尾部
    八种迭代器
    
    • 安插与移除
    c.push_back(elem)    //将一个elem的拷贝附加至容器末尾
    c.pop_back()    // 移除最后一个元素,但是不返回它
    c.push_front(elem)    //将elem的拷贝插入容器头部
    c.pop_front()    //移除头部元素,但是并不返回它
    c.insert(pos,elem)    //在iterator位置pos的前方插入一个elem拷贝,并返回新元素的位置
    c.insert(pos,n,elem)    //在iterator位置pos之前插入elem的n个拷贝,并返回第一个新元素的位置
    c.insert(pos,begin,end)    //在iterator位置pos之前插入区间[begin,end)中的所有元素,返回第一个新元素的位置
    c.insert(pos,initlist)    //在iterator位置pos之前插入初始化列表的一份拷贝,并返回第一个新元素的位置
    c.erase(pos)    //移除iterator位置pos上的元素,返回下一个元素的位置
    c.erase(begin,end)    //移除[begin,end)中的所有元素,返回下一个元素的位置
    c.remove(vlal)    //移除所有其值为val的元素
    c.remove_if(op)    //移除所有造成op结果为true的元素
    c.resize(num)    //将元素的数量改为num,多出来的元素用default构造函数完成初始化
    c.resize(num,elem)    //将元素的数量改为num,多出的元素以elem的拷贝初始化
    c.clear()    //移除所有的元素
    
    • 容器特有操作
    c.unique()    //如果存在若干相邻而数值相同的元素,就移除重复元素,只留一个
    c.unique(op)    //如果存在若干相邻元素都使op的结果为true,则移除重复元素,只留一个
    c.splice(pos,c2)    //将c2内的元素move到c之内,迭代器pos之前
    c.splice(pos,c2,c2pos)    //将c2内c2pos所指的元素转移到c内的pos所指位置之前
    c.splice(pos,c2,c2beg,c2end)    //将c2内的某一个范围的元素转移到pos之前
    c.sort()    //以<为准则对所有的元素进行排序
    c.sort(op)    //以op为准则对所有元素排序
    c.merge(c2)    //将c和c2的元素进行合并
    c.merge(c2,op)    //将c和c2的元素按照op的准则进行排序
    c.reverse()    //讲所有的元素反序
    

    Set

    set在插入时是自动排序的,且自动排序的优点使得查找时具有良好的性能。但是自动排序有一个重要的限制:不能直接改变元素值。改变元素值的唯一方法是:删除旧元素,插入新元素。元素值是常量。

    • 创建
    set<Elem>    //以<为排序准则
    set<Elem,Op>    //以Op为排序准则
    multiset<Elem>    //以<为排序准则
    multiset<Elem,Op>    //以Op为排序准则
    
    • 非更易型操作
    c.key_comp()    //返回“比较准则”
    c.value_comp()    //返回针对Value的比较准则
    c.empty()    
    c.size()    
    c.max_size()    
    
    • 特殊的查找函数
    c.count(val)    //返回元素值为val的元素
    c.find(val)    //返回元素值为val的第一个元素,如果没有就返回end()
    c.lower_bound(val)    //返回val的第一个可安插的位置,也就是元素值>=val的第一个元素位置
    c.upper_bound(val)    //返回val的最后一个可安插位置,也就是元素值>=val的最后一个元素位置
    c.equal_range(val)    //返回val的可被安插的第一个和最后一个位置,也就是元素值==val的元素区间,返回pair类型
    
    • 安插与移除
    c.insert(val)    
    c.insert(pos,val)    
    c.insert(beg,end)    
    c.insert(initlist)    
    c.erase(val)    
    c.erase(pos)    
    c.erase(beg.end)    
    c.clear()    
    

    Map

    Map的Key是常量数据,Value是可更改的,实现方式为红黑树

    • 创建
    map<key,value>    //按照<排序
    map<key,value,Op>    //按照Op排序
    multimap<key,value>    //按照<排序
    mutilmap<key,value,Op>    //Op为排序准则
    
    • 非更易性操作
    c.key_comp()    //返回比较准则
    c.value_comp()    //返回针对value的比较准则
    c.empty()    
    c.size()
    c.max_size()
    
    • 特殊查找动作
    c.count(val)    //返回key为value的元素个数
    c.find(val)    //返回key为value的第一个元素,找不到就返回end()
    c.lower_bound(val)    //返回key为val的第一个可安插位置
    c.upper_bound(val)    //返回key为val的最后一个可安插位置
    c.equal_range(val)    //返回key为val的第一个和最后一个可安插位置区间
    
    • 安插与移除
    c.insert(val)    //安插一个val的拷贝,并且返回新元素的位置
    c.insert(pos,val)    //安插val的拷贝,并且返回新元素的位置
    c.insert(beg,end)    //拷贝安插
    c.insert(initlist)    //拷贝安插
    c.erase(val)    //移除与val相等的所有元素,返回被移除的元素个数
    c.erase(beg,end)    //无返回值
    c.erase(pos)    //移除pos上的元素,无返回值
    c.clear()    
    

    Unordered

    • 创建
    #include<unordered_map>
    #include<unordered_set>
    
    unordered_set<Elem>
    unordered_set<Elem,Hash>
    unordered_set<Elem,Hash,Cmp>
    unordered_multiset<Elem>
    unordered_multiset<Elem,Hash>
    unordered_multiset<Elem,Hash,Cmp>
    unordered_map<Key,Value>
    unordered_map<Key,Value,Hash>
    unordered_map<Key,Value,hash,Cmp>
    unordered_map<Key,Value>
    unordered_map<Key,Value,Hash>
    unordered_map<Key,Value,hash,Cmp>
    
    • 布局操作
    c.hash_function()        //返回hash函数
    c.key_eq()        //返回判断式
    c.bucket_count()        //返回当前的buckets个数
    c.max_bucket_count()        //返回bucket的最大可能数量
    c.load_factor()        //返回当前的负载系数
    c.max_load_factor()        //返回当前的最大负载系数
    c.max_load_factor(value)        //设定最大负载系数
    c.rehash(bnum)        //将容器rehash,使其bucket个数至少为bnum
    c.resever(num)        //将容器rehash,使其空间至少可以拥有num个元素
    
    • 非更易性操作
    c.empty()
    c.size()
    c.max_size()
    
    • 特殊查找操作
    c.count(val)        //返回”元素值为val“的个数
    c.find()        //返回“元素值为val”的第一个元素,如果找不到就返回val
    c.equal_range(val)        //返回val可被安插的第一个位置和最后一个位置,也就是“元素值==val”的元素区间
    
    • 安插和移除元素
    c.insert(val)        
    c.insert(pos,val)        
    c.insert(beg,end)        
    c.erase(val)        
    c.erase(pos)        
    c.erase(beg,end)        
    c.clear()        
    
    • Bucket接口
    c.count_bucket()        //返回当前的Bucket个数    
    c.bucket(val)        //返回val将被找到的那个Bucket的编号
    c.bucket_size(buckidx)        //返回第buckidx个bucket所含元素的个数        
    c.begin(buckidx)        //返回一个Forward Iterator,指向第buckidx个bucket中的第一个元素
    c.end(buckidx)        //返回一个Forward Iterator,指向第buckidx个bucket中的最末元素的下一个位置
    c.cbegin(buckidx)        
    c.cend(buckidx)        
    

    Stack

    push()
    top()
    pop()
    

    Queue

    push()
    front()
    back()
    pop()
    

    Priority Queue

    push()
    top()
    pop()
    

    Bitset

    Bitset<n> bs        //初始化位图的数量
    bool any()        //是否存在所有二进制位为1的个数
    bool none()        //是否存在所有二进制位为0的个数
    size_t count()        //返回二进制个数为1的位数
    size_t size()        //返回二进制的位数
    void flip()        //将所有的二进制位取反
    void flip(size_t pos)        //将pos位置的二进制位取反
    void set()        //将所有的二进制位置为1
    void set(pos)        //将pos处的二进制置为1
    void reset()        //将所有的二进制位置为0
    void reset(pos)        //将pos处的二进制位置为0
    bool test(pos)        //测试pos处的二进制位是否是1
    string to_string()        //返回对应的字符串
    
  • 相关阅读:
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    冲刺(六)
    冲刺(五)
    冲刺(四)
    冲刺(三)
    冲刺(二)
    冲刺(一 )
    第一阶段SCRUM
  • 原文地址:https://www.cnblogs.com/ukernel/p/9191129.html
Copyright © 2020-2023  润新知