deque说明
-
deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。
-
使用前需加头文件
#include<deque>
deque定义
deque<typename> d; //typename表示队列中元素的类型
deque使用
从上图可以看出 deque可以在两端都可以操作。
deque赋值操作
- assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
- assign(n, elem);//将n个elem拷贝赋值给本身。
- deque& operator=(const deque &deq); //重载等号操作符
- swap(deq);// 将deq与本身的元素互换
//例1:assign(beg, end)
deque<int> d;
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
d.assign(a,a+6);
//例2:assign(n, elem)
deque<int> d;
d.assign(3,6);
//例4:swap(deq)
deque<int> d1,d2;
d1.assign(3, 6);
d2.assign(4, 8);
d1.swap(d2)
结果:
例1:1 2 3 4 5 6
例2:6 6 6
例4:d1元素:8 8 8 8 ;d2元素:6 6 6
deque双端插入和删除操作
- push_back(elem);//在容器尾部添加一个数据
- push_front(elem);//在容器头部插入一个数据
- pop_back();//删除容器最后一个数据
- pop_front();//删除容器第一个数据
deque数据存取
- at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
- operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
- front();//返回第一个数据。
- back();//返回最后一个数据
例1:
#include<deque>
using namespace std;
int main()
{
deque<int> d;
d.push_front(1);
d.push_back(2);
cout << "result1:" << d.at(0) << endl;
cout << "result2:" << d.operator[](0) << endl;
cout << "result3:" << d.front() << endl;
cout << "result4:" << d.back() << endl;
return 0;
}
运行结果:
result1:1
result2:1
result3:1
result4:2
deque插入操作
- insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
- insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
- insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值
例2:
#include<deque>
int main()
{
deque<int> d;
d.push_front(1);
d.push_back(2);
d.insert(d.begin(),6); //insert(pos,elem)
d.insert(d.begin(),3, 8); //insert(pos,n,elem)
int a[5] = { 1,2,3,4,5 };
d.insert(d.begin(),a ,a+2); //insert(pos,beg,end)
for (int i = 0; i < d.size(); i++)
{
cout << d[i] << endl;
}
return 0;
}
运行结果:
插入前:1 2
插入后:1 2 8 8 8 6 1 2
deque删除操作
- clear();//移除容器的所有数据
- erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
- erase(pos);//删除pos位置的数据,返回下一个数据的位置。
例3:
#include<deque>
int main()
{
deque<int> d,d2;
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
d.assign(a,a+6);
d.erase(d.begin(), d.begin()+3); //erase(beg,end)
for (int i = 0; i < d.size(); i++)
{
cout << d[i] << endl;
}
return 0;
}
运行结果:
删除前:1,2,3,4,5,6
删除后:4,5,6
deque访问
队列中元素的访问有两种方法:一种通过迭代器进行访问,一种通过下标进行访问;
例4:
//过下标进行访问
for (int i = 0; i < d.size(); i++) //d为非空的队列
{
cout << d[i] << endl;
}
//通过迭代器进行访问
deque<int>::iterator it;
for (it = d.begin() ; it != d.end(); ++it)
{
cout << *it <<endl;
}