您的位置:首页 > 产品设计 > UI/UE

STL顺序容器vector,list和deque

2017-04-30 17:26 549 查看
顺序容器是通过将指定类型的元素按照位置顺序进行存储和访问的一种容器类型.

STL标准库中的顺序容器有三种:vector, list, 和deque(double ended queue双端队列,读[dɛk])

三个容器对应的头文件:

#include <vector>
#include <list>
#include <deque>


一,容器的通用构造函数, 假设容器类型为vector, 保存的元素类型为int则有:

vector<T> vec;//默认构造
vector<T> vec(vec1);//同容器类型对象初始化
vector<T> vec(vec1.b, vec1.e);//迭代器范围b到e之间相同或可隐式转换的元素初始化


顺序容器专有构造函数:

vector<T> vec(n, v);//n个值为v的元素初始化
vector<T> vec(n);//n个值初始化,如果保存元素类型是类则调用其构造函数


二, 支持常规的算术运算符, 其中vector和deque由于连续存储, 所以和指向数组的指针一样支持一些特殊的算术运算:

it + n

it - n

it1 += it2

it1 -= it2

it1 - it2

以及>, >=, <, <=

三, 容器使用自己容器类型定义的类型

比如vector类型的容器:

vector<T>::iterator
vector<T>::const_iterator
vector<T>::size_type
vector<T>::reverse_iterator
vector<T>::difference_type
vector<T>::value_type //容器保存的元素类型
vector<T>::reference//容器元素的引用类型
const_reference//const引用类型


四, 顺序容器添加元素的函数

c.push_back(v)

c.push_front(v)

下面3个函数不适用与vector,vector没有insert函数:

c.insert(it, v)//在it前插入v,即使it是end()也同样满足,因为是从前面插入,返回新添加元素的迭代器

c.insert(it, n, v)//在it前插入n个v值的元素, 返回void

c.insert(it, b, e)//在it前插入某对象迭代器b到e之间的元素, 返回void

五, 元素访问方式

vector<int>::reference first = *vec.begin();
vector<int>::reference first = vec.front();//第一个元素的引用
vector<int>::reference last = *--vec.end();//最后一个迭代器的前面一位
vector<int>::reference last = vec.back();//最后一个元素的引用


如果是vector和deque类型的容器也可以使用下标vec
或者vec.at(n)的方式索引元素,在使用这四种方式访问元素之前都必须先确认元素确实存在!

六, 元素的删除操作

c.erase(it)

c.erase(b, e)

c.clear()

c.pop_back()

c.pop_front //vector不可以从前端删除,影响效率
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  stl