C++STl之双端队列

编程入门 行业动态 更新时间:2024-10-26 06:36:17

C++STl之双端<a href=https://www.elefans.com/category/jswz/34/1771257.html style=队列"/>

C++STl之双端队列

deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除。不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势。

头文件

#include

  • 创建deque对象

1)deque();//创建一个没有任何元素的deque对象。

deque d
2)deque(size_typen);//创建一个具有n个元素的deque对象,每个元素采用它的类型下的默认值。

deque d(10);//deque对象d有10个元素,每个元素初始值为0。
3)deque<size_type n, constT& value); //创建一个具有n个元素的deque对象,这些元素的初始值为value。

deque d(10,5);
4)deque(const deque&);//deque的拷贝构造函数,通过拷贝一个deque对象的元素值,创建一个新的deque对象。

deque d1(5,’a’);
deque d2(d1);
5)deque(constInputIterator first, const InputIterator last, const A& a=A());

//将迭代区间[first,last)所指的元素拷贝到一个新创建的deque对象中,其中内存分配器可缺省。

//利用int数组iArray,创建一个deque对象d
int iArray[]={1,2,3,4,5,6,7};
deque d(iArray, iArray+7);
初始化赋值
利用deque提供的push_back()函数,可在尾部压入新元素value,常用作deque容器的初始化赋值。

  • 元素的遍历访问

分别用数组方式和迭代器方式访问deque元素。

#include <deque>
#include <iostream>	
using namespace std; 
int main(void)
{deque<int> d;int i;d.push_back(13);d.push_back(32);d.push_back(29);cout<<"数组方式访问deque元素:"<<endl;for(i=0; i < d.size(); i++)cout << "d[" << i << "] = " << d[i] << endl;  deque<int>::iterator j,jend;//定义迭代器jend=d.end();cout<<"迭代器访问deque元素:"<<endl;for (i=0,j=d.begin(); j!=jend;i++,j++){cout << "d[" << i << "] = " << *j << endl; }return 0;
}
  • 元素的插入

由于deque使用了两个迭代器分别指向双端队列的首尾,因此deque具有高效的头部插入元素的函数push_front()。中间位置的插入用insert()函数。

void push_front(constT&);//头部插入

iterator insert(iterator pos, const T& x);//pos位置之前,插入新元素x

  #include <deque>#include <iostream>using namespace std;int main(void){	deque<int> d;d.push_back(6);d.push_back(7);   //头部插入d.push_front(5);for(int i=0; i<d.size(); i++)  //打印6 7cout << d[i] << ' ';cout << endl;//中间位置插入d.insert(d.begin() +1 ,9);     //在第个元素前插入,即9 6 7for(int j=0; j<d.size(); j++)cout << d[j] << ' ';cout << endl;return 0;}
  • 元素的删除

deque容器提供了删除首元素的pop_front函数,删除尾元素的pop_back函数,删除任意位置或迭代区间上元素的erase函数,以及删除所有元素的clear函数。

1)void pop_front();//删除deque的第一个元素

2)void pop_back();//删除deque的最后一个元素

3)iterator erase(iteratorpos); //删除pos所指向的元素

4)iterator erase(iterator first, iterator last);//删除迭代区间[first,last)所指向的所有元素

5)void clear();//删除所有元素

#include <deque>
#include <iostream>
using namespace std;
int main(void)
{	deque<int> d;d.push_back(4);d.push_back(5);d.push_back(1);d.push_back(1);d.push_back(1);d.push_back(6);for(int i=0; i<d.size(); i++)cout << d[i] << ' ' ;cout << endl;//头尾和任意位置删除元素d.erase(d.begin() +1);d.pop_front();d.pop_back();for(int j=0; j<d.size(); j++)cout << d[j] << ' ' ;cout << endl;//删除所有元素d.clear();cout << "执行clear()" <<endl << "deque元素全部清除" << endl;return 0;
}

其他函数与vector容器相似,这里不再赘述,具体可看前篇vector的应用。

更多推荐

C++STl之双端队列

本文发布于:2023-07-28 15:49:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1240164.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:队列   STl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!