- 顺序容器类型
vector 可变大小数组
deque 双端队列
list 双向列表
forward_list 单向列表【C++11新增】
array 固定大小数组【C++11新增】
string 与vector相似的容器,但专门用于保存字符
- 顺序容器选取原则:通常选用vector是最好的选择,除非你有很好的理由选择其他容器
- 容器操作
- 容器定义 and 初始化
C c;
C c1(c2);
C c1 = c2;
C c(b, e);构造c,将迭代器b和e指定范围内的元素拷贝到c
C c{a, b, c…};列表初始化c
C c = {a, b, c,…};
C seq(n);【注意:string不适用】
C seq(n, t);
- 赋值与swap
c1 = c2 将c1中的元素替换为c2中的元素
c1 = {a, b, c…} 将c1中的元素替换为列表中元素
swap(c1, c2) 与c1.swap(c2)等价
seq.assign(b, e)【注意:只适用array外的顺序容器,关联容器不适用,如map】
seq.assign(i1)
seq.assign(n, t)
- 大小
c.size()
c.empty()
- 添加/删除元素
c.insert(args) 将args中的元素拷贝进c
c.emplace(inits) 使用inits构造c中的一个元素
c.eraze(args) 删除args指定的元素
c.clear() 删除c中的所有元素,返回void
- 获取迭代器
c.begin() c.end()
- 反向容器的额外成员
reverse_iterator 按逆序寻址元素的迭代器
c.rbegin() c.rend()指向c的尾元素和首元素之前位置的迭代器
- 迭代器范围:[begin, end) 左闭合区间
while(begin != end) {
*begin = val;
++begin;
}
- 顺序容器操作
- 添加元素c.push_back(t)
- 访问元素
c[n] 返回下标为n的元素的引用
c.at(n) 返回下标为n的元素的引用
c.back() 返回尾元素的引用
c.front() 返回首元素的引用
- 删除元素
c.pop_back() 删除尾元素
c.pop_front() 删除首元素
c.erase(p) 删除迭代器指定的元素
c.erase(b, e) 删除迭代器指定的元素
c.clear() 删除c的所有元素
- 改变容器大小
c.resize(n) 调整为n
c.resize(n, t) 调整为n,新增的都赋值t
- 额外的string操作
- 构造string的其他方法
string s(cp, n) s是cp执行的数组中 前n个字符的拷贝
string s(s2, pos) s是s2的从下标pos开始的拷贝
string s(s2, pos, len) s是s2的从下标pos开始 长度为len的拷贝
子字符串操作
s.substr(pos, n) n默认为s.size()-pos
- 改变string的其他方法
除了接收迭代器的insert和erase操作外,string还提供了接受下标的版本
s.insert(pos, args) 在pos前插入args指定的字符
s.erase(pos, len) 删除从pos开始的len个元素
s.assign(args) 将s替换为args
s.append(args) s后追加agrs
s.replace(range, args) 删除s中范围range内的字符,替换为args。range = pos, len
args可为一下形式之一:
str
str, pos, len
cp, len cp的前len个字符
cp
n, c
b, e
{a,b,c…}
- string搜索操作
s.find(args) 第一次出现
s.rfind(args) 最后一次出现
s.find_first_of(args) 第一次出现args中任何一个字符
s.find_last_of(args) 最后一次出现args中任何一个字符
s.find_first_not_of(args) 第一次出现不在args中任何一个字符
s.find_last_not_of(args) 最后一次出现不在args中任何一个字符
- compare函数
- 数值转换
- val转string
to_string(val)
- string转整形
stoi(s, p, b) b默认为10进制,p默认为0
stol(s, p, b)
stoul(s, p, b)
stoll(s, p, b)
stoull(s, p, b)
- string转浮点数
stof(s, p)
stod(s, p)
stold(s, p)
- 容器适配器
除了顺序容器外,标准库还定义了三个顺序容器适配器:stack、queue、priority_queue。
容器、迭代器、和函数都有适配器