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