1.容器:特定类型对象的集合,容器均为模板类(表9.1)
vector:可变大小数组。支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢
deque:双端队列。支持快速随机访问,在头尾位置插入/删除很快
list:双向链表。只支双向顺序访问,在任何位置插入删操作速度很快
forward_list:单向链表。只支持单向顺序访问,在任何位置插入删操作速度很快。
array:固定大小数组,支持快速随机访问,不能添加删除元素。
string:与vector相似,但专用于保存字符。支持快速随机访问,在尾部插入删除速度很快。
2.所有容器都支持的操作(表9.2)
<strong>类型别名:</strong> iterator 迭代器类型 const_iterator 可以读取元素但不能修改元素的迭代器 size_type无符号整数类型,足够保存此容器类型的最大可能大小 difference_type 带符号整数类型,足骨保存两个迭代器的距离 value_type元素类型 reference; 即 value_type & const_reference<span style="font-family: Arial, Helvetica, sans-serif;">即 const value_type &</span> <strong>构造函数:</strong> C c默认构造函数,构造空容器 C c1(c2)构造c2的拷贝c1 C c(b,e)构造c1将迭代器b,e指定范围的元素拷贝到c,(array不支持) C c{a,b,c,d,,,}列表初始化
<strong>赋值与swap:</strong> c1=c2; c1={a,b,c,d,,,} a.swap(b) 交换a,b元素 swap(a,b) <span style="font-family: Arial, Helvetica, sans-serif;"> 交换a,b元素</span> <strong>大小:</strong> c.size()元素数目 (forward_list不支持) c.max_size() 最大元素数目 c.empty()
<strong>迭代器:</strong> c.begin() c.end() c.rbegin() c.rend()
<strong>反向容器:</strong> reverse_iterator const_reverse_iterator c.rbegin() c.rend() c.crbegin() c.crend()
<strong>3.容器定义及初始化(表9.3)</strong>
C c 若c为array,则元素按照默认方式初始化,否则为空容器
C c1(c2)
C c1=c2
C c{a,b,c,,,}
C c={a,b,c,,,}
C c(b,e) array不适用
只有顺序容器(不包括array)的构造函数才能接受大小参数
C seq(n) string不适用
C seq(n,t)
<strong>4.添加元素(非array)(表9.5)</strong>
forward_list不支持push_back,emplace_back,且有自己的insert,emplace,
c.push_back(t)
c.emplace_back(args) 尾部添加元素,返回空 适用于vector deque list string
c.push_front(t)
c.emplace_front(t) 头部添加元素,返回空 适用于deque list forward_list
c.insert(p,t)
c.emplace(p,args) 在<span style="font-family: Arial, Helvetica, sans-serif;">迭代器p之前添加元素,返回指向新元素的迭代器</span>
c.insert(p,n,t) 在迭代器之前插入n个t值元素,返回新添加的第一个元素的迭代器
c.insert(p,b,e) b,c不能指向c中的元素,返回新添加的第一个元素的迭代器
c.insert(p,il) 在迭代器之前元素值列表,返回新添加的第一个元素的迭代器 适用于除farward_list之外的所有元素,forward_list有自己版本的insert emplace
<strong>5.访问元素</strong><span style="font-family: Arial, Helvetica, sans-serif;">(表9.6)</span>
<strong style="font-family: Arial, Helvetica, sans-serif;"></strong>
at 与下标只适用于string vector deque array
c.back()不适用于forward_list
c<strong>.</strong>back()
c.front()
c[n]
c.at(n)
<strong>6.删除元素(表9.7)</strong>
farword_list有自己特有的erase
farword_list不支持pop_back()
string vector不支持pop_front()
c.pop_back() 删除尾元素,返回空
c.pop_front() 删除首元素,返回空
c.erase(p) 删除迭代器指向的元素,返回被删元素的后的元素的迭代器
c.erase(b,e) 返回一个指向最后一个删除的元素的后一个元素的迭代器
c.clear() 删除所有元素,返回空
<strong>7 forward_list(表9.8)</strong>
lst.before_begin
lst.cbefore_begin 首前迭代器,不能解引用
lst.insert_after(p,t)
lst.insert_after(p,n,t)
lst.insert_after(p,b,e)
lst.insert_after(p,il)在迭代器之后的位置插入元素,返回最后一个插入的元素的迭代器
lst.emplace_after(p,args)
lst.erase_after(p)
lst.erase_after(b,e)返回之后一个被删除的元素的后一个元素的跌大气