1. deque 容器基本概念
功能描述:
可以对头端进行插入或删除操作
deque 与 vector 的区别:
vector 对于头部的插入删除效率低 数据量越大 效率越低
deque 相对而言 对头部的插入删除操作比 vector 快
vector 访问元素的速度比 deque 快
deque 容器的迭代器也支持随机访问
deque 内部工作原理:
deque 内部有中控器 维护每段缓冲区中的内存 缓冲区中放真实数据
中控器维护的是每个缓冲区的地址 使得使用 deque 时像一片连续的数据
2. deque 容器的构造函数
功能描述:
deque 容器构造
代码示例
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 构造函数
void printDeque(const deque<int> &d) //增加const 防止对传入参数的修改
{
for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
{
//*it = 100; //防止修改操作
cout << *it << " ";
}
cout << endl;
}
//测试函数
void test01()
{
deque<int> d1;
for (int i = 0;i < 10;i++)
{
d1.push_back(i);
}
printDeque(d1); //0 1 2 3 4 5 6 7 8 9
deque<int> d2(d1.begin(), d1.end()); //区间方式构造
printDeque(d2); //0 1 2 3 4 5 6 7 8 9
deque<int> d3(3, 100); //n 个 m 的形式构造
printDeque(d3); //100 100 100
deque<int> d4(d3); //拷贝构造
printDeque(d4); //100 100 100
}
int main()
{
test01();
system("pause");
return 0;
}
3. deque 容器赋值操作
功能描述:
给 deque 容器赋值
代码示例
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 赋值操作
void printDeque(const deque<int> &d) //增加const 防止对传入参数的修改
{
for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
{
cout << *it << " ";
}
cout << endl;
}
//测试函数
void test01()
{
deque<int> d1;
for (int i = 0;i < 10;i++)
{
d1.push_back(i);
}
printDeque(d1); //0 1 2 3 4 5 6 7 8 9
//operator= 赋值
deque<int> d2;
d2 = d1;
printDeque(d2); //0 1 2 3 4 5 6 7 8 9
//assign 赋值
deque<int> d3;
d3.assign(d1.begin(), d1.end());
printDeque(d3); //0 1 2 3 4 5 6 7 8 9
deque<int> d4;
d4.assign(3, 100);
printDeque(d4); //100 100 100
}
int main()
{
test01();
system("pause");
return 0;
}
4. deque 大小操作
功能描述:
对 deque 容器进行大小操作
代码示例
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 大小操作
void printDeque(const deque<int> &d) //增加const 防止对传入参数的修改
{
for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
{
cout << *it << " ";
}
cout << endl;
}
//测试函数
void test01()
{
deque<int> d1;
for (int i = 0;i < 10;i++)
{
d1.push_back(i);
}
printDeque(d1); //0 1 2 3 4 5 6 7 8 9
if (d1.empty())
{
cout << "d1 为空" << endl;
}
else
{
cout << "d1 不为空" << endl;
cout << "d1 的大小:" << d1.size() << endl; //10
//deque 没有容量概念
}
//重新指定大小
d1.resize(15,1); //空区间用1填充
//printDeque(d1); /0 1 2 3 4 5 6 7 8 9 1 1 1 1 1
d1.resize(5);
printDeque(d1); //0 1 2 3 4
}
int main()
{
test01();
system("pause");
return 0;
}
5. deque 插入和删除操作
功能描述:
向 deque 容器中插入和删除数据
注:插入删除提供的数据时迭代器
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 插入删除操作
void printDeque(const deque<int> &d) //增加const 防止对传入参数的修改
{
for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
{
cout << *it << " ";
}
cout << endl;
}
//测试函数
void test01()
{
deque<int> d1;
//尾插
d1.push_back(10);
d1.push_back(20);
//头插
d1.push_front(100);
d1.push_front(200);
printDeque(d1); //200 100 10 20
//头删
d1.pop_front();
//尾删
d1.pop_back();
printDeque(d1); //100 10
}
void test02()
{
deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
printDeque(d1); //200 100 10 20
//insert 插入
d1.insert(d1.begin(), 1000);
printDeque(d1); //1000 200 100 10 20
d1.insert(d1.begin(), 2, 2000);
printDeque(d1); //2000 2000 1000 200 100 10 20
//按照区间来进行插入
deque<int> d2;
d2.push_back(1);
d2.push_back(2);
d2.push_back(3);
d1.insert(d1.begin(), d2.begin(), d2.end());
printDeque(d1); //1 2 3 2000 2000 1000 200 100 10 20
}
void test03()
{
deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
//删除
deque<int>::iterator it = d1.begin();
it++;
d1.erase(it);
printDeque(d1); //200 10 20
//按区间方式删除
d1.erase(d1.begin(), d1.end());
printDeque(d1); //
//清空
d1.clear();
printDeque(d1); //
}
int main()
{
test01();
test02();
test03();
system("pause");
return 0;
}
6. deque 数据存取
功能描述:
对 deque 中数据的存取操作
代码示例
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 数据存取
//测试函数
void test01()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);
//通过[]方式访问元素
for (int i = 0;i < d.size();i++)
{
cout << d[i] << " "; //300 200 100 10 20 30
}
cout << endl;
//通过at方式访问元素
for (int i = 0;i < d.size();i++)
{
cout << d.at(i) << " "; //300 200 100 10 20 30
}
cout << endl;
cout << "第一个元素为:" << d.front() << endl; //300
cout << "最后一个元素为:" << d.back() << endl; //30
}
int main()
{
test01();
system("pause");
return 0;
}
7. deque 排序
功能描述:
利用算法实现对 deque 容器进行排序
支持随机访问的迭代器的容器 都可以用 sort 算法对其进行排序
如:vector
代码示例:
#include <iostream>
using namespace std;
#include <string>
#include <deque>
#include <algorithm> //标准算法头文件
//deque 容器的排序
void printDeque(const deque<int> &d) //增加const 防止对传入参数的修改
{
for (deque<int>::const_iterator it = d.begin();it != d.end();it++)
{
cout << *it << " ";
}
cout << endl;
}
//测试函数
void test01()
{
deque<int> d;
d.push_back(10);
d.push_back(20);
d.push_back(30);
d.push_front(100);
d.push_front(200);
d.push_front(300);
printDeque(d); //300 200 100 10 20 30
//排序
cout << "排序后" << endl;
sort(d.begin(),d.end()); //默认降序
printDeque(d); //10 20 30 100 200 300
}
int main()
{
test01();
system("pause");
return 0;
}