C++ STL容器操作函数全集

容器类别(Container class)的共通操作函数

操作效果
ContType c产生一个未含任何元素的空容器
ContType c1(C2)产生一个同型容器
ConType c(beg,end)复制[beg;end]区间内的元素,作为容器初值
c.~ConType()删除所有元素,释放内存
c.size()返回容器中的元素数量
c.empty()判断容器是否为空(相当于size()==0,但可能更快)
c.max_size()返回元素的最大可能数量
c1==c2判断是否c1等于c2
c1!=c2判断是否c1不等于c2
c1<c2判断是否c1小于c2
c1>c2判断是否c1大于c2
c1<=c2判断是否c1小于等于c2
c1>=c2判断是否c1大于等于c2
c1=c2将c2的所有元素赋值给c1
c1.swap(c2)交换c1和c2的数据
swap(c1,c2)同上,是个全局函数
c.begin()返回一个迭代器,指向第一个元素
c.end()返回一个迭代器,指向最后一个元素的下一位置
c.rbegin()返回一个逆向迭代器,指向逆向遍历时的第一元素
c.rend()返回一个逆向迭代器,指向逆向遍历时的最后元素的下一位置
c.insert(pos,elem)将elem的一份副本插于pos处。返回值和pos的意义并不相同
c.erase(beg,end)移除[beg;end]区间内的所有元素。某些容器会返回未被移除的第一个接续元素
c.clear()移除所有元素,令容器为空
c.get_allocator()返回容器的内存模型(memory model)

Vectors 的构造函数和析构函数

操作效果
vector<Elem> c产生一个空vector,其中没有任何元素
vector<Elem> c1(c2)产生另一个同型vector的副本(所有元素都被拷贝)
vector<Elem> c(n)利用元素的defualt构造函数生成一个大小为n的vector
vector<Elem> c(n,elem)产生一个大小为n的vector,每个元素值都是elem
vector<Elem> c(beg,end)产生一个vector,以区间[beg;end]作为元素初值
c.~vector<Elem>()销毁所有元素,并释放内存

Vectors的非变动性操作

操作效果
c.size()返回当前的元素数量
c.empty()判断大小是否为零。等同于size()==0,但可能更快
c.max_size()返回可容纳的元素最大数量
c.capacity()返回重新分配空间前所容纳的元素最大数量
c.reserve()如果容量不足,扩大
c1==c2判断c1是否等于c2
c1!=c2判断c2是否不等于c1
c1<c2判断c1是否小于c2
c1>c2判断c1是否大于c2
c1<=c2判断c1是否小于等于c2
c1>=c2判断c1是否大于等于c2

Vectors的赋值操作

操作效果
c1=c2将c2的全部元素赋值给c1
c.assign(n,elem)复制n个elem,赋值给c
c.assign(beg,end)将区间[beg;end]内的元素赋值给c
c1.swap(c2)将c1和c2元素互换
swap(c1,c2)同上,此为全局函数

直接用来存取vectors元素的各项操作

操作效果
c.at(idx)返回索引idx所标示的元素。如果idx越界,抛出out_of_range
c[idx]返回索引idx所标示的元素。不进行范围检查
c.front()返回第一个元素。不检查第一个元素是否存在
c.back()返回最后一个元素。不检查最后一个元素是否存在

Vectors的迭代器相关函数

操作效果
c.begin()返回一个随机存取迭代器,指向第一元素
c.end()返回一个随机存取迭代器,指向最后一个元素的下一位置
c.rbegin()返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend()返回一个逆向迭代器,指向逆向迭代的最后一个元素的下一位置

vector的安插、移除相关操作

操作效果
c.insert(pos,elem)在pos位置上插入一个elem副本,并返回新元素位置
c.insert(pos,n,elem)在pos位置上插入n个elem副本。无回传值
c.insert(pos,beg,end)在pos位置上插入区间[beg;end]内的所有元素的副本。无回传值
c.push_back(elem)在尾部添加一个elem副本
c.pop_back()移除最后一个元素(但不回传)
c.erase(pos)移除pos位置上的元素,返回下一元素的位置
c.erase(beg,end)移除[beg;end]区间内的所有元素,返回下一个元素的位置
c.resize(num)将元素数量改为num(如果size()变大了,多出来的新元素都需以default构造函数完成)
c.resize(num,elem)将元素数量改为num(如果size()变大了,多出来的新元素都是elem的副本)
c.clear()移除所有元素,将容器清空

vector的特殊操作

操作效果
c.flip()将所有bool元素值取反,亦即求补码
m[idx].flip()将索引idx的bit元素取反值
m[mid]=val令索引idx的bit元素值为val(指定单一bit)
m[idx1]=m[idx2]令索引dix1的bit元素值为索引idx2的bit元素值

deques的构造函数和析构函数

操作效果
deque<Elem> c产生一个空的deque
deque<Elem> c1(c2)针对某个deque产生同型副本(所有元素都被拷贝)
deque<Elem> c(n)产生一个deque,含有n个元素,这些元素均以default构造函数产生出来
deque<Elem> c(n,elem)产生一个deque,含有n个元素,这些元素均是elem的副本
deque<Elem> c(beg,end)产生一个deque,以区间[beg;end]内的元素为初值
c.~deque<Elem>()销毁所有元素,释放内存

deque的非变动性操作(nonmodifying operations)

操作效果
c.size()返回容器的实际元素个数
c.empty()判断容器大小是否为零
c.max_size()返回可容纳的最大元素数量
c1==c2判断是否c1等于c2
c1!=c2判断是否c1不等于c2
c1<c2判断是否c1小于c2
c1>c2判断是否c1大于c2
c1<=c2判断是否c1小于等于c2
c1>=c2判断是否c1大于等于c1
c.at(idx)返回索引idx所标示的元素。如果idx越界,抛出out_of_range
c[idx]返回索引idx所标示的元素,不进行范围检查
c.front()返回第一个元素,不检查元素是否存在
c.back()返回最后一个元素,不检查元素是否存在
c.begin()返回一个随机迭代器,指向第一个元素
c.end()返回一个随机迭代器,指向最后一个元素的下一位置
c.rbegin()返回一个逆向迭代器,指向逆向迭代是的第一个元素
c.rend()返回一个逆向迭代器,指向逆向迭代时的最后元素的下一位置

deque的变动性操纵(modifying operation)

操作效果
c1=c2将c2的所有元素赋值给c1
c.assign(n,elem)将n个副本赋值给c
c.assign(beg,end)将区间[beg;end]中的元素赋值给c
c1.swap(c2)将c1和c2的元素互换
swap(c1,c2)将c1和c2的元素互换,全局函数
c.insert(pos,elem)在pos位置插入一个elem副本,并返回新元素的位置
c.insert(pos,n,elem)在pos位置插入elem的n个副本,无返回值
c.inser(pos,beg,end)在pos位置插入区间[beg;end)所有元素的副本,无返回值
c.push_back(elem)在尾部添加elem的一个副本
c.pop_back()移除最后一个元素(但不回传)
c.push_front(elem)在头部插入elem的一个副本
c.pop_front()移除头部元素(但不回传)
c.erase(pos)移除pos位置上的元素,返回下一元素位置
c.erase(beg,end)移除[beg;end)区间内的所有元素,返回下一元素位置
c.resize(num)将大小(元素个数)改为num。如果size()增长了,新增的元素都以default构造函数产生出来
c.resize(num,elem)将大小(元素个数)改为num。如果size()增长了,新增的元素都是elem的副本
c.clear()移除所有元素,将容器清空

list的构造函数和析构函数

操作效果
list<Elem> c产生一个空的list
list<Elem> c1(c2)产生一个与c2同型的list(每个元素都被复制)
list<Elem> c(n)产生拥有n个元素的list,这些元素都以default构造函数初始化
list<Elem> c(n,elem)产生拥有n个元素的list,每个元素都是elem的副本
list<Elem> c(beg,end)产生一个list并以[beg;end]区间内的元素为初值
c.~list<Elem>()销毁所有元素,释放内存

list的非变动性操作

操作效果
c.size()返回元素个数
c.empty()判断容器大小是否为零
c.max_size()返回元素的最大可能数量
c1==c2判断是否c1等于c2
c1!=c2判断是否c1不等于c2
c1<c2判断是否c1小于c2
c1>c2判断是否c1大于c2
c1<=c2判断c1是否小于等于c2
c1>=c2判断c1是否大于等于c1

List的assignment(赋值)操作函数

操作效果
c1=c2将c2的全部元素赋值给c1
c.assign(n,elem)将elem的n个拷贝赋值给c
c.assign(beg,end)将区间[beg;end)的元素赋值给c
c1.swap(c2)将c1和c2的元素互换
swap(c1,c2)将c1和c2的元素互换,此为全局函数

List元素的直接存取

操作效果
c.front()返回第一个元素。不检查元素是否存在
c.back()返回最后一个元素。不检查元素是否存在

List的迭代器相关函数

操作效果
c.begin()返回一个双向迭代器,指向第一个元素
c.end()返回一个双向迭代器,指向最后元素的下一个位置
c.rbegin()返回一个逆向迭代器,指向逆向迭代的第一个元素
c.rend()返回一个逆向迭代器,指向逆向迭代的最后元素的下一位置

List的安插、移除操作函数

操作效果
c.insert(pos,elem)在迭代器pos所指位置上安插一个elem副本,并返回新元素位置
c.insert(pos,n,elem)在迭代器pos所指位置安插n个elem副本,无返回值
c.insert(pos,beg,end)在迭代器pos所指位置上安插[beg;end]区间内的所有元素,无返回值
c.push_back(elem)在尾部追加一个elem副本
c.pop_back()移除最后一个元素(但不返回)
c.push_front(elem)在头部安插一个elem副本
c.pop_front()移除第一元素(但不返回)
c.remove(val)移除所有其值为val的元素
c.remove_if(op)移除所有“造成op(elem)结果为true”的元素
c.erase(pos)移除迭代器pos所指元素,返回下一元素位置
c.erase(beg,end)移除区间[beg;end]内的所有元素,返回下一元素位置
c.resize(num)将元素容量变为num。如果size()变大,则以default构造函数构造所有新增元素
c.resize(num,elem)将元素容量变为num。如果size()变大,则以elem副本作为新增元素的初值
c.clear()移除全部元素,将整个容器清空

List的特殊变动性操作(Special Modifying Operatrion)

操作效果
c.unique()如果存在若干相邻而数值相等的元素,就移除重复元素,只留下一个
c.unique(op)如果存在若干相邻元素,都使op()的结果为true,则移除重复元素,只留下一个
c1.splice(pos,c2)将c2内的所有元素转移到c1之内,迭代器pos之前
c1.splice(pos,c2,c2pos)将c2内的c2pos所指元素转移到c1内的pos所指位置上(c1和c2可相同)
c1.splice(pos,c2,c2beg,c2end)将c2内的[c2beg;c2end]区间内所有元素转移到c1内的pos之前(c1和c2可相同)
c.sort()以operator<为准则,对所有元素排序
c.sor(op)以op()为准则,对所有元素排序
c1.merge(c2)假设c1和c2容器都包含已序(sorted)元素,将c2的全部元素转移到c1,并保证合并后的list仍为已序
c1.merge(c2,op)假设c1和c2容器都包含op()原则下的已序(sorted)元素,将c2的全部元素转移到c1,并保证合并后的list在op()原则下仍为已序
c.reverse()将所有元素反序(reverse the order)

Lists的各种操作在异常发生时提供的特殊保证

操作效果
push_back()如果不成功,就是无任何作用
push_front()如果不成功,就是无任何作用
insert()如果不成功,就是无任何作用
pop_back()不抛出异常
pop_front()不抛出异常
erase()不抛出异常
clear()不抛出异常
resize()如果不成功,就是无任何作用
remove()只要元素比较操作不抛出异常,它就不抛出异常
remove_if()只要判断式predicate不抛出异常,它就不抛出异常
unique()只要元素比较操作不抛出异常,它就不抛出异常
splice()不抛出异常
merge()只要元素比较时不抛出异常,它便保证“要么不成功,要么无任何作用”
reverse()不抛出异常
swap()不抛出异常

Sets和Multisets的构造函数和析构函数

操作效果
set c产生一个空的set/multiset,其中不含任何元素
set c(op)以op为排序准则,产生一个空的set/multiset
set c1(c2)产生某个set/multiset的副本,所有元素均被复制
set c(beg,end)以区间[beg;end]内的元素产生一个set/multiset
set c(beg,end,op)以op为排序基准,利用[beg;end]内的元素生成一个set/multiset
c.~set()销毁所有元素,释放内存

set的形式

操作效果
set<Elem>一个set,以less<>(operator<)为排序准则
set<Elem,op>一个set,以op为排序准则
multiset<Elem>一个multiset,以less<>(operator<)为排序准则
multiset<Elem,op>一个multiset,以op为排序准则

Sets和Multisets的非变动性操作(Nonmodifying Operations)

操作效果
c.size()返回容器的大小
c.empty()判断容器大小是否为零。等同于size()==0,但可能更快
c.max_size()返回可容纳的最大元素数量
c1==c2判断是否c1等于c2
c1!=c2判断是否c1不等于c2
c1<c2判断是否c1小于c2
c1>c2判断是否c1大于c2
c1<=c2判断是否c1小于等于c2
c1>=c2判断是否c1大于等于c2

Sets和Multisets的搜寻操作函数

操作效果
count(elem)返回“元素值为elem”的元素个数
find(elem)返回“元素值为elem”的第一个元素,如果找不到就返回end()
lower_bound(elem)返回elem的第一个可安插位置,也就是“元素>=elem”的第一个元素位置
upper_bound(elem)返回elem的最后一个可安插位置,也就是“元素值>elem”的第一个元素位置
equal_bound(elem)返回elem可安插的第一个位置和最后一个位置,也就是“元素值==elem”的元素区间

Sets和Multisets的赋值操作

操作效果
c1=c2将c1中所有元素赋值给c1
c1.swap(c2)将c1和c2的元素互换
swap(c1,c2)将c1和c2的元素互换,此为全局函数

Sets和Multisets的迭代器相关操作函数

操作效果
c.begin()返回一个双向迭代器(将元素视为常数),指向第一元素
c.end()返回一个双向迭代器(将元素视为常数),指向最后元素的下一位置
c.rbegin()返回一个逆向迭代器,指向逆向遍历时的第一元素
c.rend()返回一个逆向迭代器,指向逆向遍历的最后元素的下一位置

Sets和Multisets的元素安插和移除

操作效果
c.inset(elem)安插一份elem副本,返回新元素位置(不论是否成功-对sets而言)
c.insert(pos,elem)安插一份elem副本,返回新元素位置(pos是个提示,指出安插操作的搜寻起点。如果提示恰当,可大大加快速度)
c.insert(beg,end)将区间[beg;end]内所有元素的副本安插到c(无返回值)
c.erase(elem)移除“与elem相等”的所有元素,返回被移除的元素个数
c.erase(pos)移除迭代器pos所指位置的元素,无返回值
c.erase(beg,end)移除区间[beg;end]内的所有元素,无返回值
c.clear()移除全部元素,将整个容器清空

Maps和Multimaps的构造函数和析构函数

操作效果
map c产生一个空的map/multimap,其中不含任何元素
map c(op)以op为排序基准,产生一个空的map/multimap
map c(beg,end)以区间[beg;end]内的元素产生一个map/multimap
map c1(c2)产生某个map/multimap的副本,所有元素均被复制
map c(beg,end,op)以op为排序准则,利用[beg;end]内的元素生成一个map/multimap
c.~map()销毁所有元素,释放内存

map的形式

操作效果
map<Key,Elem>一个map,以less<>(operator<)为排序准则
map<Key,Elem,op>一个map,以op为排序准则
multimap<Key,Elem>一个multimap,以less<>(operator<)为排序准则
multimap<Key,Elem,op>一个multimap,以op为排序准则

Maps和Multimaps的非变动性操作(Nonmodifying Operation)

操作效果
c.size()返回容器的大小
c.empty()判断容器大小是否为零
c.max_size()返回容器的最大元素数量
c1==c2判断是否c1等于c2
c1!=c2判断是否c1不等于c2
c1<c2判断是否c1小于c2
c1>c2判断是否c1大于c2
c1<=c2判断是否c1小于等于c2
c1>=c2判断是否c1大于等于c2

Maps和Multimaps的特殊搜寻操作函数

操作效果
count(Key)返回“键值等于Key”的元素个数
find(Key)返回“键值等于Key”的第一个元素,找不到就返回end()
lower_bound(Key)返回“键值为Key”之元素的第一个可安插位置,也就是“键值>=Key”的第一个元素位置
upper_bound(Key)返回“键值为Keyl”之元素的最后一个可安插位置,也就是“键值>Key”的第一个元素位置
equal_range(Key)返回“键值为Key”之元素的第一个可安插位置和最后一个可安插位置,也就是键值“== key”的元素区间

Maps和Multimaps的赋值(赋值)操作

操作效果
c1=c2将c2中所有元素赋值给c1
c1.swap(c2)将c1和c2的元素互换
swap(c1,c2)将c1和c2的元素互换,此为全局函数

Maps和Multimaps的迭代器相关操作函数

操作效果
c.begin()返回一个双向迭代器(key被视为常数),指向第一元素
c.end()返回一个双向迭代器(key被视为常数),指向最后元素的下一位置
c.rbegin()返回一个逆向迭代器,指向逆向遍历时的第一个元素
c.rend()返回一个逆向迭代器,指向逆向遍历时的最后元素的下一位置

Maps和Multimaps的元素安插和移除

操作效果
c.insert(elem)安插一份elem副本,返回新元素位置(不论是否成功-对maps而言)
c.insert(pos,elem)安插一份elem副本,返回新元素位置(pos是个提示,指出安插操作的搜寻起点。如果提示恰当,可大大加快速度)
c.insert(beg,end)将区间[beg;end]内所有元素的副本安插到c(无返回值)
c.erase(elem)移除“实值(value)与elem相等”的所有元素,返回被移除元素个数
c.erase(pos)移除迭代器pos所指位置上的元素,下一个位置
c.erase(beg,end)移除区间[beg;end]内的所有元素,无返回值
c.clear()移除全部元素,将整个容器清空

Maps的直接元素存取(透过operator[])

操作效果
m[key]返回一个reference,指向键值为key的元素。如果该元素尚未存在,就安插该元素

各种容器提供的迭代器类型

容器迭代器类型(iterator category)
Vector随机存取
Deque随机存取
List双向
Set双向,元素为常量
Multiset双向,元素为常量
Map双向,元素为常量
Multimap双向,元素为常量
String随机存取
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值