说明:vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector 容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。
注意:deque 容器的迭代器并不是普通的指针,其复杂度和 vector 不是一个量级,这影响各个运算的层面。因此,除非有必要,我们应该尽可能的使用 vector,而不是 deque。
1.构造函数
1 deque<T> deq; //默认构造形式 2 deque(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身 3 deque(n,elem); //构造函数将 n 个 elem 拷贝给本身 4 deque(const deque &deq); //拷贝构造函数
2.赋值操作
1 assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身 2 assign(n,elem); //将 n 个 elem 拷贝赋值给本身 3 deque& operator=(const deque &deq); //重载等号操作符 4 swap(deq); //将 deq 与本身的元素互换
3.大小操作
1 deque.size(); //返回容器中元素的个数 2 deque.empty(); //判断容器是否为空 3 deque.resize(num); 4 //重新指定容器的长度为 num,若容器变长,则以默认值填充新位置;如果容器变短,则末尾超出容器长度的元素被删除。 5 deque.resize(num, elem); 6 //重新指定容器的长度为 num,若容器变长,则以 elem 值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。
4.双端插入和删除操作
1 push_back(elem); //在容器尾部添加一个数据 2 push_front(elem); //在容器头部插入一个数据 3 pop_back(); //删除容器最后一个数据 4 pop_front(); //删除容器第一个数据
5.存取数据
1 at(idx);//返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range 2 operator[];//返回索引 idx 所指的数据,如果 idx 越界,不抛出异常,直接出错 3 front();//返回第一个数据 4 back();//返回最后一个数据
6.插入操作
1 insert(pos,elem);//在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置 2 insert(pos,n,elem);//在 pos 位置插入 n 个 elem 数据,无返回值 3 insert(pos,beg,end);//在 pos 位置插入[beg,end)区间的数据,无返回值
7.删除操作
1 clear(); //移除容器的所有数据 2 erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置 3 erase(pos); //删除 pos 位置的数据,返回下一个数据的位置