目录
1. deque容器基本概念
功能:
双端数组,可以对头端进行插入删除操作
deque与vector区别:
1.vector对于头部的插入删除效率低,数据量越大,效率越低
2.deque相对而言,对头部的插入删除速度比vector快
3.vector访问元素时的速度会比deque快,这和两者内部实现有关
deque内部工作原理:
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
deque容器的迭代器也是支持随机访问的
2. deque构造函数
功能:deque容器构造
函数原型:
示例1:(默认构造形式)
#include<iostream>
using namespace std;
#include<string>
#include<deque>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*it的值了
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
printDeque(d1);
}
int main() {
test01();
system("pause");
return 0;
}
结果:
示例2:(使用区间方式赋值)
结果:
示例3:(将n个element拷贝给本身)
结果:
示例4:(拷贝构造)
结果:
3. deque赋值操作
功能:给deque容器进行赋值
函数原型:
示例1:(等号赋值)
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*it的值了
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
// = 赋值
deque<int> d2;
d2 = d1;
printDeque(d2);
}
int main() {
test01();
system("pause");
return 0;
}
结果:
示例2:(assign赋值)
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*it的值了
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
// assign 赋值
deque<int> d3;
d3.assign(d1.begin(), d1.end());
printDeque(d3);
// assign赋值
deque<int> d4;
d4.assign(10, 100);
printDeque(d4);
}
int main() {
test01();
system("pause");
return 0;
}
结果:
4. deque大小操作
功能:对deque容器大小进行操作
函数原型:
示例1:(判断deque是否为空,和deque的大小)
#include<iostream>
using namespace std;
#include<deque>
void test01()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
cout << "d1是否为空:" << d1.empty() << endl;
cout << "d1的大小为:" << d1.size() << endl;
}
int main() {
test01();
system("pause");
return 0;
}
结果:
示例2:(重新指定deque的大小)
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*it的值了
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int> d1;
for (int i = 0; i < 10; i++)
{
d1.push_back(i);
}
//重新指定大小
d1.resize(15);
printDeque(d1);
}
int main() {
test01();
system("pause");
return 0;
}
结果:
//重新指定大小
d1.resize(15,2);
printDeque(d1);
结果:
5. deque插入和删除
功能:向deque容器中插入和删除数据
函数原型:
两端插入操作:
指定位置操作:
示例1:(在头部和尾部插入数据)
#include<iostream>
using namespace std;
#include<deque>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*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);
}
int main() {
test01();
system("pause");
return 0;
}
结果:
示例2:(在头部和尾部删除数据)
结果:
示例3:(insert的使用)
结果:
在头部插入两个1000:
d1.insert(d1.begin(), 2, 1000);
按照区间进行插入:
在d2索引为1的位置插入一段数据
结果:
示例4:(删除)
删除索引为1的位置的数据
结果:
删除一个区间:
结果:
清空:
d1.clear();
6. deque数据存取
功能:对deque中的数据进行存取操作
函数原型:
示例:
#include<iostream>
using namespace std;
#include<deque>
void test01()
{
deque<int> d1;
d1.push_back(10);
d1.push_back(20);
d1.push_front(100);
d1.push_front(200);
//通过[]方式访问元素
cout << d1[0] << endl; //访问第一个元素
//通过at方式访问元素
cout << d1.at(0) << endl;
cout << "第一个元素为:" << d1.front() << endl;
cout << "最后一个元素为:" << d1.back() << endl;
}
int main() {
test01();
system("pause");
return 0;
}
结果:
7. deque排序
功能:实现对deque容器进行排序
函数原型:
示例:
#include<iostream>
using namespace std;
#include<deque>
#include<algorithm>
void printDeque(const deque<int> &d)
{
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
//*it =100; //使用const_iterator后就无法改变*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);
//排序
sort(d1.begin(), d1.end());
printDeque(d1);
}
int main() {
test01();
system("pause");
return 0;
}
结果: