所在的位置: C++ >> C++介绍 >> C编程语言C的deque容器

C编程语言C的deque容器

1.deque容器基本概念

功能:

    双端数组,可以对头端或者尾端进行插入删除操作

deque与vector区别:

vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部或尾部的插入删除速度会比vector快vector访问元素时的速度会比

deque内部工作原理:

deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据

中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间

deque容器的迭代器也是支持随机访问的

2.deque构造函数

功能描述:

    deque容器构造

/*函数原型dequeT默认构造函数deque(beg,end)构造将[beg,end]区间中的元素拷贝给本身deque(n,elem)构造函数将n个elem拷贝给本身deque(constdequedeq)拷贝构造函数*///deque的打印函数限只读voidprintDeque(constdequeintd){for(dequeint::const_iteratorit=d.begin();it!=d.end();it++){cout*itendl;}}voidtest01(){//第一种dequeintdl;for(inti=0;i10;i++){dl.push_back(i);}printDeque(dl);//第二种dequeintd2(dl.begin(),dl.end());//第三种dequeintd(10,2);//第四种拷贝构造dequeintd4(d);}intmain(){test01();system("pause");return0;}.deque赋值操作

功能描述:

        给deque容器进行赋值

/*函数原型dequeoperator=(constdequedeq)重载等号操作符assign(beg,end)将[beg,end]区间中的数据拷贝赋值给本身assign(n,elem)将n个elem拷贝赋值给本身*///deque的打印函数限只读voidprintDeque(constdequeintd){for(dequeint::const_iteratorit=d.begin();it!=d.end();it++){cout*it"";}coutendl;}voidtest01(){dequeintd1;for(inti=0;i10;i++){d1.push_back(i);}printDeque(d1);//等号赋值dequeintd2=d1;printDeque(d2);//assign赋值dequeintd;d.assign(d2.begin(),d2.end());printDeque(d);//assign赋值dequeintd4;d4.assign(5,);printDeque(d4);}intmain(){test01();system("pause");return0;}4.deque容量大小的操作

功能描述:

      deque容器的大小进行操作

/*函数原型empty()判断容器是否为空size()返回容器中元素个数resize(intnum)重新指定容器的长度num若容器变长,则以默认值填充新位置若容器变短,则末尾超出容器长度的元素被删除resize(intnum,elem)重新指定容器的长度为num,若容器变长,则以elem值填充新位置若容器变短,则末尾超出容器长度的元素被删除deque没有capacity()函数,因为deque是没有容量限制的*///deque的打印函数限只读voidprintDeque(constdequeintd){for(dequeint::const_iteratorit=d.begin();it!=d.end();it++){cout*it"";}coutendl;}voidtest01(){dequeintd1;for(inti=0;i10;i++){d1.push_back(i);}printDeque(d1);if(d1.empty()){cout"d1为空"endl;}else{cout"d1不为空"endl;coutd1.size()endl;//输出为:10//deque容器没有容量概念}//重新指定大小d1.resize(15);printDeque(d1);//输出为:00d1.resize(14,2);printDeque(d1);//输出为:2d1.resize(5);printDeque(d1);//输出为:}intmain(){test01();system("pause");return0;}5.deque容器的插入和删除

功能描述:

    向deque容器中插入和删除数据

/*函数原型两端插入操作push_back(ele)尾部插入元素elepush_front(ele)头部插入元素elepop_back()删除最后一个元素pop_front()删除第一个元素指定位置操作insert(pos,ele)迭代器在pos位置插入一个ele元素的拷贝,返回新数据位置insert(pos,int,ele)迭代器在pos位置插入n个ele数据无返回值insert(pos,beg,end)迭代器在pos位置插入[beg,end]区间的数据无返回值erase(pos)删除pos位置的数据指,返回下一个数据位置erase(beg,end)删除迭代器从start到end之间的元素clear()删除容器中所有元素*///deque的打印函数限只读voidprintDeque(constdequeintd){for(dequeint::const_iteratorit=d.begin();it!=d.end();it++){cout*it"";}coutendl;}//头尾的插入和删除voidtest01(){dequeintd1;//尾插d1.push_back(10);d1.push_back(20);//头插d1.push_front();d1.push_front();//printDeque(d1);//输出:1020//尾删d1.pop_back();//printDeque(d1);//输出:10//头删d1.pop_front();//printDeque(d1);//输出:10}//特定位置的删除和插入voidtest02(){dequeintd2;dequeintd;//尾插d2.push_back(10);d2.push_back(20);d2.push_back();d2.push_back();d.push_back();d.push_back();printDeque(d2);//输出:1020//insert插入d2.insert(d2.begin(),0);printDeque(d2);//输出:01020d2.insert(d2.begin(),2,);printDeque(d2);//输出:01020d2.insert(d2.begin(),d.begin(),d.end());printDeque(d2);//输出:01020//删除d2.erase(d2.begin());printDeque(d2);//输出:01020d2.erase(d2.begin()+,d2.end());printDeque(d2);//输出:}intmain(){test01();test02();system("pause");return0;}6.deque容器的数据存取

功能描述:

    对deque中的数据的存取操作

/*函数原型at(intidx)返回索引idx所指的数据operator[]返回索引idx所指的数据利用[]访问front()返回容器中第一个数据元素back()返回容器中最后一个数据元素*/voidtest01(){dequeintd1;d1.push_back(10);d1.push_back(20);d1.push_back(0);d1.push_front();d1.push_front();d1.push_front(00);//通过[]方式访问元素for(inti=0;id1.size();i++){coutd1[i]endl;}//通过at方式访问元素for(inti=0;id1.size();i++){coutd1.at(i)endl;}//访问第一个元素coutd1.front()endl;//访问最后一个元素coutd1.back()endl;}intmain(){test01();system("pause");return0;}7.deque排序

功能描述:

    利用算法实现对deque容器进行排序

#includealgorithm//标准算法头文件/*算法sort(iteratorbeg,iteratorend)对beg和end区间内元素进行排序*///deque的打印函数限只读voidprintDeque(constdequeintd){for(dequeint::const_iteratorit=d.begin();it!=d.end();it++){cout*it"";}coutendl;}voidtest01(){dequeintd1;d1.push_back(10);d1.push_back(20);d1.push_back(0);d1.push_front();d1.push_front();d1.push_front(00);printDeque(d1);//输出:0010//排序//需要标准算法头文件#includealgorithm//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序//vector容器也可以利用sort进行排序sort(d1.begin(),d1.end());printDeque(d1);//输出:0从小到大}intmain(){test01();system("pause");return0;}




转载请注明:http://www.aierlanlan.com/rzfs/7009.html