deque容器:
1.deque基本概念:
功能:双端数组,可以对头端进行插入删除操作。
deque与vector区别:
vector头插头删时需要向后移动数组,效率低下。
但vector访问元素时的速度会比deque快。
deque工作原理:
deque内部有一个中控器,存放每个缓冲区的地址,维护缓冲区中的内容,缓冲区存放真实数据。
deque打印:
void PrintDeque(deque<int>d)
{
for (deque<int>::iterator i = d.begin(); i < d.end(); i++)
{
cout << *i << " ";
}
cout << endl;
}
依然用iterator迭代器。
注:如果将传入的形参加const修饰:const deque<int>d , 就需要将迭代器改为const_iterator
void PrintDeque(const deque<int>d)
{
for (deque<int>::const_iterator i = d.begin(); i < d.end(); i++)
{
cout << *i << " ";
}
cout << endl;
}
2.deque构造函数:
deque<T>deq; //默认构造
deque(beg,end); //将[beg, end)区间中的元素拷贝给本身
deque(n, elem); //将n个elem拷贝给本身
deque(const deque &deq); //拷贝构造
void test01()
{
deque<int>d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
deque<int>d2(d1.begin(), d1.end());
deque<int>d3(10, 100);
deque<int>d4(d1);
}
3.deque赋值操作:
deque& operator=(const deque &deq); //等号重载,拷贝赋值
assign(beg, end); //将一个区间内的数据拷贝赋值
assign(n, elem); //用n个elem拷贝赋值
4.deque大小操作:
deque.empty( ); //判断容器是否为空
deque.size( ); //返回容器中元素的个数
deque.resize(int num); //重新指定容器长度
deque.resize(int num, elem); //重新指定容器长度
注:deque没有容量的概念---capacity。
5.deque插入和删除:
(1)两端操作:
push_back(elem); //在容器尾部插入
push_front(elem); //在容器头部插入
pop_back(); //尾删
pop_front(); //头删
(2)指定位置操作
insert(pos, elem); //在pos位置插入elem元素,返回新数据的位置
insert(pos, n, elem); //在pos位置插入n个elem,无返回值
insert(pos, beg, end); //在pos位置插入一个区间的数据,无返回值
clear(); //清空容器
erase(beg, end); //删除一个区间的数据,返回下一个数据的位置
erase(pos); //删除pos位置的数据,返回下一个数据的位置
void test03()
{
deque<int>d1;
d1.push_back(10);//10
d1.push_back(20);//10 20
d1.push_front(5);//5 10 20
d1.push_front(1);//1 5 10 20
d1.pop_back();//1 5 10
d1.pop_front();//5 10
d1.insert(d1.begin(), 1000);//1000 5 10
d1.insert(d1.begin(), 2, 500);//500 500 1000 5 10
deque<int>d2;
d2.insert(d2.begin(), d1.begin(), d1.end());//500 500 1000 5 10
d1.erase(d1.begin() + 1);//500 1000 5 10
d1.erase(d1.end() - 2, d1.end());//500 1000
}
6.deque数据存取:
at(int idx); //返回idx 所指数据
operator[ ]; //下标重载
front(); //第一个数据元素
back(); //最后一个数据元素
7.deque排序操作:
sort(iterator beg, iterator end); //对beg和end区间内元素进行排序
注:(1)需包含 #include<algorithm>。
(2)默认升序。
void test04()
{
deque<int>d;
d.push_back(1);
d.push_back(5);
d.push_back(4);
d.push_back(2);
d.push_back(3);
PrintDeque(d);//1 5 4 2 3
sort(d.begin(), d.end());
PrintDeque(d);//1 2 3 4 5
}
ps:sort排序算法:
对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序。
如:vector容器