双端数组,可以对头端进行插入删除操作
deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低
deque相对而言,对头部的插入删除速度回比vector快
vector访问元素时的速度会比deque快,这和两者内部实现有关
deque构造函数
赋值
大小
插入和删除
数据存取
排序
#include<iostream>
#include<vector>
#include<string>
#include<deque>
#include <algorithm>
using namespace std;
//只读迭代器const_iterator
void printdeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it = 100; 不可以修改
cout << *it << " ";
}
cout << endl;
}
//deque构造函数
void test01()
{
//deque<T> deqT; //默认构造形式
//deque(beg, end); //构造函数将[beg, end)区间中的元素拷贝给本身。
//deque(n, elem); //构造函数将n个elem拷贝给本身。
//deque(const deque & deq); //拷贝构造函数
deque<int>d1;
d1.push_back(1);
d1.push_back(1);
d1.push_back(1);
d1.push_back(1);
printdeque(d1);
deque<int> d2(d1.begin(), d1.end());
printdeque(d2);
deque<int>d3(10, 100);
printdeque(d3);
deque<int>d4 = d3;
printdeque(d4);
}
//赋值
void test02()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printdeque(d1);
deque<int>d2;
d2 = d1;
printdeque(d2);
deque<int>d3;
d3.assign(d1.begin(), d1.end());
printdeque(d3);
deque<int> d4;
d4.assign(10, 100);
printdeque(d4);
}
//deque大小,与vector不一样,deque没有容量
void test03()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printdeque(d1);
//判断容器是否为空
if (d1.empty())
{
cout << "d1为空" << endl;
}
else
{
cout << "d1不为空" << endl;
//统计大小
cout << "d1的大小为: " << d1.size() << endl;
}
//从新指定大小
d1.resize(15, 1);
printdeque(d1);
d1.resize(5);
printdeque(d1);
}
//插入和删除
void test04()
{
//push_back(elem); //在容器尾部添加一个数据
//push_front(elem); //在容器头部插入一个数据
//pop_back(); //删除容器最后一个数据
//pop_front(); //删除容器第一个数据
//insert(pos, elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
//insert(pos, n, elem); //在pos位置插入n个elem数据,无返回值。
//insert(pos, beg, end); //在pos位置插入[beg,end)区间的数据,无返回值。
//clear(); //清空容器的所有数据
//erase(beg, end); //删除[beg,end)区间的数据,返回下一个数据的位置。
//erase(pos); //删除pos位置的数据,返回下一个数据的位置
deque<int> d1;
//尾插
d1.push_back(10);
d1.push_back(20);
//头插
d1.push_front(100);
d1.push_front(200);
printdeque(d1);
//尾删
d1.pop_back();
//头删
d1.pop_front();
printdeque(d1);
//插入
d1.insert(d1.begin(), 100);
printdeque(d1);
d1.insert(d1.begin(),2, 1000);
printdeque(d1);
d1.insert(d1.begin(),d1.begin(), d1.end());
printdeque(d1);
}
//数据存取
void test05()
{
deque<int>d1;
d1.push_back(10);
d1.push_back(10);
d1.push_back(10);
d1.push_back(10);
for (int i = 0; i < d1.size(); i++)
{
cout << d1[i] << " ";
}
cout << endl;
for (int i = 0; i < d1.size(); i++)
{
cout << d1.at(i) << " ";
}
//头尾
cout<<"头"<<d1.front();
cout << "尾" << d1.back();
}
//deque排序
void test06()
{
//sort(iterator beg, iterator end) //对beg和end区间内元素进行排序
deque<int> d;
d.push_back(10);
d.push_back(101);
d.push_back(10);
d.push_back(8);
printdeque(d);
sort(d.begin()+1, d.end()-1);
printdeque(d);
}
int main()
{
test01();
test02();
test03();
test04();
test05();
test06();
return 0;
}