(C/C++学习)25. STL之deque容器

说明: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 位置的数据,返回下一个数据的位置
原文地址:https://www.cnblogs.com/tuihou/p/12409495.html