顺序容器
vector 可变大小的数组,支持快速随机访问,在尾部之外的位置插入或者删除元素可能会很慢;
deque 双端队列,在队列的头尾位置进行插入/删除操作很快;
array 固定大小的数组,不能添加或者删除元素;
list 双向链表,只支持双向顺序访问,在任何位置插入、删除都很快;
forward_list 单向链表,只支持单向访问,在任何位置插入、删除都很快;
一般情况下使用vector
容器操作
a.swap(b)等价于swap(a,b) //交换a,b的元素
seq.assign(b,e) //将seq中的元素替换为迭代器b和e所表示范围中的元素(仅顺序容器)
c.maxsize() //c中可以保存的最大元素数目
c.insert(args) //将args中的元素拷贝进c
c.insert(p,t) //在迭代器p指向的元素之前创建一个值为t的元素
c.emplace(inits) //使用inits构造c中的一个元素
c.erase(args) //删除args指定的元素
c.pop_back() c.pop_front() //删除首尾元素
c.clear() //删除c中的所有元素,返回void
一些泛型算法
只读算法
accumulate
求一定范围内元素的和
定义在头文件numeric
accumulate(vec.cbegin(),vec.cend(),0);
// 求和范围;求和初值;返回值类型由求和初值数据类型决定
// 只读取不改变元素时用cbegin和cend
// 后续使用返回的迭代器来改变元素的值时使用begin和end;
equal
用来确定两个序列是否保存相同的值,将两个序列的对应元素相比较,全部相同即为true;
两个序列元素类型不需相同;
条件:第二个序列长度>=第一个序列长度
equal(roster1.cbegin(),roster1.cend(),roster2.cbegin());
写容器元素的算法
fill
更改容器中元素的值
int a;
fill(vec.cbegin(),vec.cend(),a); //将范围内的元素全部置为a;
未完待续。。。