![](https://i-blog.csdnimg.cn/blog_migrate/aa015e49e636323e3fd61cb14f95e351.jpeg)
算法设计(79)
![](https://i-blog.csdnimg.cn/blog_migrate/78cd517c0383d079f8e9c0f6b8713367.jpeg)
版权声明:本文为博主原创文章,欢迎转载,转载请标明出处。
在数据结构中还有一种很常见的队列叫做双端队列,我们在上一篇博客《C++ STL学习——queue》中讲到的队列queue是一种最标准的队列,只能在尾部插入数据,在头部删除数据。而今天我们讲到的deque分别可以在两端进行插入与删除,可以说用起来更加的灵活。示例代码上传至 https://github.com/chenyufeng1991/STL_deque 。
(1)创建一个deque
- deque<int> deque1;
- deque<int> deque2(deque1);
- deque<int> deque3(10);
- deque<int> deque4(10,0);
(2)deque尾部插入数据
- deque1.push_back(1);
- deque1.push_back(2);
- deque1.push_back(3);
- deque1.push_back(4);
- PrintDeque(deque1);
(3)deque头部插入数据
- deque1.push_front(5);
- deque1.push_front(6);
- PrintDeque(deque1);
(4)查看头部元素、尾部元素和某位置元素
- cout << "头部元素为:" << deque1.front() << endl;
- cout << "尾部元素为:" << deque1.back() << endl;
- cout << "某位置的元素为:" << deque1.at(2) << endl;
- cout << "某位置的元素为:" << deque1[2] << endl;
(5)使用迭代器在某位置插入元素
- // 使用迭代器插入或删除元素
- deque<int>::iterator iterInsert = deque1.begin();
- iterInsert = iterInsert + 2;
- deque1.insert(iterInsert, 99);
- PrintDeque(deque1);
(6)使用迭代器在某位置删除元素
- deque<int>::iterator iterErase = deque1.begin();
- iterErase = iterErase + 2;
- deque1.erase(iterErase);
- PrintDeque(deque1);
(7)size(), max_size()
- cout << "deque1.size = " << deque1.size() << endl;
- cout << "deque1.max_size = " << deque1.max_size() << endl;
- deque1.pop_back();
- PrintDeque(deque1);
- deque1.pop_front();
- PrintDeque(deque1);
(9)交换两个deque
- // 交换两个deque
- deque<int> dequeSwap;
- dequeSwap.push_back(11);
- dequeSwap.push_back(22);
- dequeSwap.push_back(33);
- cout << "deque1:" ;
- PrintDeque(deque1);
- cout << "dequeSwap:";
- PrintDeque(dequeSwap);
- deque1.swap(dequeSwap);
- cout << "deque1:" ;
- PrintDeque(deque1);
- cout << "dequeSwap:";
- PrintDeque(dequeSwap);
(10)判断deque是否为空
- cout << "deque是否为空:" << deque1.empty() << endl;
- deque1.clear();
- cout << "deque是否为空:" << deque1.empty() << endl;
- PrintDeque(deque1);
(11)迭代器打印deque
- void PrintDeque(deque<int> pDeque)
- {
- cout << "deque元素为:";
- deque<int>::iterator dequeIter;
- for (dequeIter = pDeque.begin(); dequeIter != pDeque.end(); dequeIter++)
- {
- cout << *dequeIter << " ";
- }
- cout << endl;
- }