deque的用法

来源:互联网 发布:crossfit slash知乎 编辑:程序博客网 时间:2024/06/05 23:08
#include <stdio.h>#include <deque>#include <algorithm>using namespace std;class GreaterComp : public binary_function<const int&, const int&, bool>{public:result_type operator()(first_argument_type& _Left, second_argument_type& _Right){return _Left > _Right;}};int main(int argc, char** argv){//创建双向队列deque<int> deq;//往双向队列尾部加入元素,返回voiddeq.push_back(1);//往双向队列头部加入元素,返回voiddeq.push_front(2);//返回队列尾元素printf("deq.back(): %d\n", deq.back());//返回队列头部元素printf("deq.front(): %d\n", deq.front());//返回队列大小printf("deq.size(): %d\n", deq.size());//弹出队列尾deq.pop_back();//弹出队列头deq.pop_front();printf("deq.size(): %d\n", deq.size());//往队列尾插入元素deq.emplace_back(1);//往队列头插入元素deq.emplace_front(2);printf("deq.front(): %d, deq.back(): %d\n", deq.front(), deq.back());//往队列指定位置插入元素,返回指向插入元素的迭代器deque<int>::iterator iter = deq.emplace(deq.begin(), 3);printf("*iter: %d\n", *iter);printf("deq.front(): %d, deq.back(): %d\n", deq.front(), deq.back());//清空队列deq.clear();printf("deq.size(): %d\n", deq.size());deq.push_back(100);//在指定pos位置插入元素,返回指向插入元素的迭代器iter = deq.insert(deq.begin(), 1);printf("*iter: %d\n", *iter);printf("deq.front(): %d, deq.back(): %d\n", deq.front(), deq.back());printf("deq.size(): %d\n", deq.size());//在指定pos位置插入initializer_list,返回指向插入initializer_list第一个元素的迭代器iter = deq.insert(deq.begin(), { 1, 2, 3 });printf("*iter: %d\n", *iter);printf("deq.front(): %d, deq.back(): %d\n", deq.front(), deq.back());printf("deq.size(): %d\n", deq.size());deque<int> deqTemp;deqTemp.push_back(1);deqTemp.push_back(5);//在指定pos位置插入[iter1, iter2)之间的元素,返回指向插入[iter1, iter2)区间第一个元素的迭代器iter = deq.insert(deq.begin(), deqTemp.begin(), deqTemp.end());printf("*iter: %d\n", *iter);printf("deq.front(): %d, deq.back(): %d\n", deq.front(), deq.back());printf("deq.size(): %d\n", deq.size());//删除指定位置的元素,返回下一个位置的元素的迭代器, 需要删除的元素必须存在,否则会出错iter = deq.erase(deq.begin());printf("*iter: %d\n", *iter);iter = deq.erase(deq.begin(), deq.end());if (iter == deq.end())printf("end\n");deq.push_back(1);//返回pos位置的元素, 超出界限会引发out of range错误printf("deq.at(%d): %d\n", 0, deq.at(0));printf("max_size(): %d\n", deq.max_size());//resize重新界定元素的数量,超出补0,多出删除deq.resize(0);printf("size: %d\n", deq.size());deq.resize(100);printf("size: %d, back(): %d\n", deq.size(), deq.back());printf("empty(): %d\n", deq.empty());deq.clear();//operator[] 下标操作符在序列式容器中使用必须容器了这个下标已经存在元素,如果这个下标尚未初始化会出错//deq[0] = 1    出错deq.push_back(2);deq[0] = 10;printf("back(): %d\n", deq.back());deq.push_back(1);deque<int> jdeq;jdeq.push_back(-100);//给jdeq赋值jdeq.assign(deq.begin(), deq.end());printf("jdeq: ");iter = jdeq.begin();for (; iter != jdeq.end(); ++iter)printf("%d ", *iter);printf("\n");//排序sort(jdeq.begin(), jdeq.end());printf("jdeq: ");iter = jdeq.begin();for (; iter != jdeq.end(); ++iter)printf("%d ", *iter);printf("\n");deque<int> sort_deq;for (int i = 0; i < 10; i++)sort_deq.push_back(i);sort(sort_deq.begin(), sort_deq.end(), GreaterComp());iter = sort_deq.begin();for (; iter != sort_deq.end(); ++iter)printf("%d ", *iter);printf("\n");//初始化//deque<int> deq1(10);//deque<int> deq2(10, 1);//deque<int> deq3(deq1.begin(), deq1.end());//deque<int> deq4({ 1, 2, 3 });getchar();return 0;}

运行结果为:

deq.back(): 1deq.front(): 2deq.size(): 2deq.size(): 0deq.front(): 2, deq.back(): 1*iter: 3deq.front(): 3, deq.back(): 1deq.size(): 0*iter: 1deq.front(): 1, deq.back(): 100deq.size(): 2*iter: 1deq.front(): 1, deq.back(): 100deq.size(): 5*iter: 1deq.front(): 1, deq.back(): 100deq.size(): 7*iter: 5enddeq.at(0): 1max_size(): 1073741823size: 0size: 100, back(): 0empty(): 0back(): 10jdeq: 10 1jdeq: 1 109 8 7 6 5 4 3 2 1 0


0 0
原创粉丝点击