顺序容器:
vector:变长数组;支持随机访问,尾部插删快。
deque:双向队列;支持随机访问,头部/尾部删除快,适用于删除后数组中的元素自动前移的情况。
list:双向链表;不支持随机访问,任何位置插删都快,适用于经常中间位置插删的情况,然后再拷贝给vector。
forward_list:单向链表
array:数组
string:字符串
容器适配器:
stack:栈
queue:队列
priority_queue:优先队列
关联容器:
set:
map:
必须在中间插入:
方法1:先用vector的追加,然后用sort()
方法2:输入用list,输入完成复制到vector中
迭代器
包括:iterator const_iterator reverse_iterator const_reverse_iterator
分别使用:
begin()/end() 指向第一个元素/最后一个元素的下一个位置
cbegin()/cend() 同上
rbegin()/rend() 指向最后一个元素/指向第一个元素的前一个位置
crbegin()/crend() 同上
当不需要写访问时,应使用cbegin() !!!
所有容器都支持:++ –
string vector deque 支持:+n -n >= 两个迭代器之间相减
-------------------------------------------------------通用的操作(顺序+关联容器)-------------------------------------------------------------------
定义和初始化:
C c;
C c(c2);//也可:C c = c2; c和c2必须是同类型
C c{a, b, c};//也可C c{a, b, c};
C c(b, e); //b e为迭代器范围 元素相容即可
顺序容器增加的
C seq(n); //包含n个元素
C seq(n, t); //包含n个元素,都为t
赋值和交换
c1 = c2; //c1和c2必须是同类型
c1 = {a, b, c};
c1.assign(b, e); //b e为迭代器范围 元素相容即可
c1.assign(n, t);
swap(c1, c2);
容器大小
size();
empty();
两个容器的比较
!= == 依次对每个元素进行比较
--------------------------------------------------------------------------顺序容器支持的操作-----------------------------------------------------------
添加元素
1.push_back();
2.push_front(); //deque list支持
3.insert(); //vector deque list 支持
(1)插单个元素
v.insert(v.end(), 10);
(2)插多个元素
v.insert(v.end(), 10, 0); //10个0
v.insert(v.begin(), v2.end() - 2, v2.end()); //插一个迭代器范围
v.insert(v.end(), {1, 2 3});
删除元素
0.clear();
1.pop_back();
2.pop_front(); //deque list 支持
3.erase();
(1)删除单个元素
v.earse(it);
(2)删除多个元素
v.earse(it1, it2);
访问元素
1.front(); //返回首元素的引用
2.back(); //返回尾元素的引用
3.[n] // n越界的话不会报错
4.at(n) //n越界的化会报out_of_range 的错误。
其他更多详细看这个目录其他的文章