双端队列的元素可以从两端弹出,其限定插入和删除操作都可以在表的两端进行。
相比于队列,双端队列就好在允许双端操作这里了。
CPP
- #include <deque>
- using namespace std;
-
- // 定义一个空对象
- deque<int> deque0;
-
- // 定义并初始化一个含有五个参数的对象
- deque<int> deque1{1, 2, 3, 4, 5};
- //插入函数
- deque0.push_front(3);//头部插入
- deque0.push_back(2);//尾部插入
也可以用类似数组的操作,直接取值!
可以用双向迭代器:
加r
就是反向,单词应该是reback
的首字母;
加c
就常量,单词应该是const
的首字母。
成员函数 | 功能 |
---|---|
begin() | 返回指向容器中第一个元素的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。 |
end() | 返回指向容器最后一个元素之后一个位置的正向迭代器;如果是 const 类型容器,在该函数返回的是常量正向迭代器。此函数通常和 begin() 搭配使用。 |
rbegin() | 返回指向最后一个元素的反向迭代器;如果是 const 类型容器,在该函数返回的是常量反向迭代器。 |
rend() | 返回指向第一个元素之前一个位置的反向迭代器。如果是 const 类型容器,在该函数返回的是常量反向迭代器。此函数通常和 rbegin() 搭配使用。 |
cbegin() | 常量正向迭代器,不能用于修改元素。 |
cend() | 常量正向迭代器,不能用于修改元素。 |
crbegin() | 常量反向迭代器,不能用于修改元素。 |
crend() | 常量反向迭代器,不能用于修改元素。 |
迭代器的具体功能示意图
对象名字iter
就是对应的随机访问迭代器,可以支持:
iter+=i:使得 iter
往后移动 i 个元素。
iter-=i:使得 iter
往前移动 i 个元素。
iter+i:返回 iter
后面第 i 个元素的迭代器。
iter-i:返回 iter
前面第 i 个元素的迭代器。
iter[i]:返回 iter
后面第 i 个元素的引用。
- //查询
- if (!deque1.empty()) { //若true,则deque中无元素
- //顺序遍历,跟数组一样可以直接取值!
- for (int i = 0; i < deque1.size(); i++)
- cout << deque1[i] << " ";
- cout << endl;
-
- //正向迭代器遍历
- for (deque<int>::iterator iter = deque1.begin(); iter != deque1.end(); iter++)
- cout << *iter << " ";
- cout << endl;
-
- //反向迭代器遍历
- for (deque<int>::reverse_iterator iter = deque1.rbegin(); iter != deque1.rend(); iter++)
- cout << *iter << " ";
- cout << endl;
- }
如果临时记不住指针的类型,可以用auto
关键字代替!
- //删除函数,无返回值
- deque0.pop_front();//去头
- deque0.pop_back();//去尾
- deque0.clear();//清空
int size = deque0.size();
- #include <algorithm>
- using namespace std;
- //利用算法实现对deque容器进行排序
-
- sort(deque0.begin(),deque0.end());
对于自定义的类型,则需要重载operator<
和operator==
,然后重新调用该算法就可以了。具体例子在其他文章中,不在此复述。
感谢现在努力的自己。
感谢现在的好奇,为了能成为更好的自己。