顺序容器类型
vector | 可变大小数组。支持快速随机访问。在尾部之外的位置插入或者删除元素可能很慢 |
deque | 双端队列。支持快速随机访问,在头尾插入/删除速度很快 |
list | 双向链表,只支持双向顺序访问,在list中任何位置进行插入/删除操作都很快 |
forward_list | 单项链表,只支持单项顺序访问,在链表任何位置进行插入/删除造作都很快 |
array | 固定大小数组,支持快速随机访问,不能添加和删除元素 |
string | 与vector相似的容器,但专门用于保存字符。随机访问很快,在尾部插入/删除很快 |
容器操作
类型别名 | |
iterator | 容器类型的迭代器类型 |
const_iterator | 可以读取元素,但不能修改元素的迭代器类型 |
size_type | 无符号整数,足够保存此容器类型最大可能容器的大小 |
differenct_type | 带符号整数类型,足够保存两个迭代器之间的距离 |
value_type | 元素类型 |
构造函数 | |
C c | 默认构造函数 |
C c1(c2) |
构造c2的拷贝c1 |
C c(b,e) | 构造c,将迭代器b和e指定范围能的元素到c(array)不支持 |
C c{a,b,c,d,e,f} | 列表初始化c |
赋值与swap | |
c1=c2 | 将c1中的元素替换为c2中的元素 |
c1={a,b,c} | 将c1中的元素替换为列表中的元素(不适用于array) |
a.swap(b) | 交换a和b的元素 |
swap(a,b) | 与a.swap(b)等价 |
大小 | |
c.size() | c中元素的数目(不支持forward_list) |
c.maxsize() | c可保存的最大元素数目 |
c.empty() | 若c中存储了元素,返回false,否则返回true |
添加/删除元素 | |
注:在不同的容器中,这些操作的结构都不同 | |
c.insert(args) | 将args中的元素拷贝进c |
c.emplace(inits) | 使用inits构造c中的一个元素 |
c.erase(args) | 删除args指定的元素 |
c.clear() | 删除c中的所有元素,返回void |
关系运算符 | |
== , != | 所有容器都支持相等(不等)运算符 |
< , <= ,> ,>= | 关系运算符(无序关联容器不支持) |
获取迭代器 | |
c.begin(),c.end() | 返回指向c的首元素和微元素之后位置的迭代器 |
c.cbegin(),c,cend() | 返回const_iterator |
注意:赋值相关运算会导致指向坐标容器内部的迭代器、引用和指针失效。而swap操作将容器内容交换不会导致指向容器的迭代器、引用和指针失效
seq.assign(b,e) 将seq中的元素替换为迭代器b和e所表示的范围中的元素。迭代器b和e不能指向seq中的元素
seq.assign(il) 将迭代器中的元素替换为初始化列表i1中的元素
seq.assign(n,t) 将seq中的元素替换为n个值为t的元素
向顺序容器添加元素
除array外,所有标准库容器都提供灵活的内存管理。在运行时可以动态添加或删除元素来改变容器大小。
这些操作都会改变容器大小,array不支持这些操作
forward_list 有自己转悠版本的insert和emplace
forward_list不支push_back和emplace_back
vector和string不支持push_front和emplace_front
c.pushback(t) | 在c尾部创建一个值为t或由args创建的元素。返回void |
c.emplace_back(args) | |
c.push_front(t) | 在c头部创建一个值为t或由args创建的元素。返回void |
c.emplace_front(args) | |
c.insert(p,t) | 在迭代器p指向的元素之前插入n个值为t的元素。返回指向鑫添加的第一个元素的迭代器,或n为0,则返回p |
c.insert(p,b,e) | 将迭代器b和e指定范围内的元素插入到迭代器p指向的元素之前,b和e不能指向c中的元素。返回指向新添加的第一个元素的迭代器;若范围为空,则返回p |
c.insert(p,il) | il是一个花括号包围的元素值列表。将这些给定插入到迭代器p指向的元素之前。返回指向新天的第一个元素的迭代器:若列表为空,则返回p |
String的额外操作
标准库string类型还提供了接受C风格字符数组的insert和assign版本。
s.substr(pos,n) | 返回一个string,包含s中从pos开始的第n个字符的拷贝。pos的默认值为0。 |
s.insert(pos,args) | 在pos之前插入args指定的字符。pos可以是一个下标或一个迭代器。接受下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器 |
s.erase(pos,len) | 删除从位置pos开始的len个字符。如果len被删除,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用 |
s.assign(args) | 将s中的字符替换为args指定的字符。返回一个指向s的引用 |
a.sppend(args) | 将args追加到s。返回一个指向s的引用 |
s.replace(rang,args) | 删除s中范围range内的字符,替换为args指定的字符。range或者是一个下表和一个长度,或者是一对指向s的迭代器,返回一个指向s的引用 |
s.find(args) | 查找s中args第一次出现的位置 |
s.rdinf(args) | 查找s中args最后一次出现的位置 |
s.find_first_of(args) | s中查找args中任何一个字符第一次出现的位置 |
s.find_last_of(agrs) | s中查找args中任何一个字符最后出现的位置 |
s.find_first_not_of(args) | 在s中查找第一个不在args中的字符 |
s.find_last_not_of(args) | 在s中查找最后一个不在args中的字符 |