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()        //返回对应的字符串