deque


deque,全名double-ended queue  是一种具有队列和栈的性质的数据结构。
双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。
双端队列是限定插入和删除操作在表的两端进行的线性表。这两端分别称做端点1和端点2。
也可像栈一样,可以用一个铁道转轨网络来比喻双端队列。
在实际使用中,还可以有输出受限的双端队列(即一个端点允许插入和删除,另一个端点只允许插入的双端队列)
和输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)。
而如果限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻的栈了。
尽管双端队列看起来似乎比栈和队列更灵活,但实际上在应用程序中远不及栈和队列有用。

deque 的调用(也可以手写)来自:https://www.cnblogs.com/liubilan/p/9461141.html

 1 deque - 双向队列
 2 1.构造
 3 无参构造:
 4 deque<int> a;  //<>内自定义数据类型;
 5 带参构造:
 6 deque(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
 7 deque(n,elem); //构造函数将n个elem拷贝给本身。
 8 deque(const deque &deq); //拷贝构造函数。
 9 2.头部&尾部的添加和删除
10 deque.push_back(elem); //在容器尾部添加一个数据
11 deque.push_front(elem); //在容器头部插入一个数据
12 deque.pop_back(); //删除容器最后一个数据
13 deque.pop_front(); //删除容器第一个数据
14 3.中间数据存取
15 deque.at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
16 deque[idx]; //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
17 deque.front(); //返回第一个数据。
18 deque.back(); //返回最后一个数据
19 4.元素插入
20 deque.insert(pos,elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
21 deque.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
22 deque.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值。
23 5.数据删除
24 deque.clear(); //移除容器的所有数据
25 deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
26 deque.erase(pos); //删除pos位置的数据,返回下一个数据的位置。
27 6.迭代指针
28 deque.begin(); //返回容器中第一个元素的迭代器。
29 deque.end(); //返回容器中最后一个元素之后的迭代器。
30 deque.rbegin(); //返回容器中倒数第一个元素的迭代器。
31 deque.rend(); //返回容器中倒数最后一个元素之后的迭代器。
32 7.赋值&拷贝
33 deque.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。
34 deque.assign(n,elem); //将n个elem拷贝赋值给本身。
35 deque& operator=(const deque &deq); //重载等号操作符 
36 deque.swap(deq); // 将vec与本身的元素互换
37 8.大小&判断非空
38 deque.size(); //返回容器中元素的个数
39 deque.empty(); //判断容器是否为空
40 deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
41 deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

 

posted @ 2019-10-30 19:42  月亮茶  阅读(346)  评论(0编辑  收藏  举报