deque容器:双端数组(可以对头端插入删除,也可以对尾端插入删除)
deq.push_back()
deq.pop_back()
deq.push_front()
deq.pop_front()
deq.front()
deq.back()
deq.begin()
deq.end()
deq.insert( )...//几种形式
sort( iterator begin, iterator end )
//对于支持随机访问的迭代器的容器,都可以利用sort算法,直接对其进行排序
.
(1)、deque 和 vector 比较
deque头部插入删除比vector快
vector访问元素比deque快
.
(2).内部工作原理:
deque内部有中控器,维护每段缓冲区中内存,缓冲区中存放真实数据
中控器维护缓存区每块地址,使得deque像一片连续的空间
.
1、deque构造函数
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
#include<iostream>
using namespace std;
#include<deque>
//deque的构造函数
//只读,迭代器也必须只读
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
//1.默认构造
deque<int>deq1;
for (int i = 0; i < 10; i++)
{
deq1.push_back(i);
}
printDeque(deq1);
//2.区间构造
deque<int>deq2(deq1.begin(), deq1.end());
printDeque(deq2);
//3.n个elem
deque<int>deq3(4, 787);
printDeque(deq3);
//4.拷贝构造
deque<int>deq4(deq3);
printDeque(deq4);
}
int main()
{
test01();
system("pause");
return 0;
}
2、deque赋值操作
#include<iostream>
using namespace std;
#include<deque>
//deque的赋值操作
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
//1.默认
deque<int>deq1;
for (int i = 0; i < 10; i++)
{
deq1.push_back(i);
}
printDeque(deq1);
//2.operator=赋值
deque<int>deq2;
deq2 = deq1;
printDeque(deq2);
//3.assign赋值,区间
deque<int>deq3;
deq3.assign(deq1.begin(), deq1.end());
printDeque(deq3);
//4.assign赋值,n个elem
deque<int>deq4;
deq4.assign(5, 42);
printDeque(deq4);
}
int main()
{
test01();
system("pause");
return 0;
}
3、deque容器---大小操作
deque.empty()
deque.size()
deque.resize(num)
deque.resize( num, elem)
#include<iostream>
using namespace std;
#include<deque>
//deque-大小操作
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int>deq1;
for (int i = 0; i < 10; i++)
{
deq1.push_back(i);
}
printDeque(deq1);
//判断是否为空
if (deq1.empty())
{
cout << "deque为空" << endl;
}
else
{
cout << "deque不为空" << endl;
cout << "deque的大小:" << deq1.size() << endl;
}
//重新指定大小
//deq1.resize(15);
deq1.resize(15, 3);
printDeque(deq1);
deq1.resize(5);
printDeque(deq1);
}
int main()
{
test01();
system("pause");
return 0;
}
4、deque的插入删除
#include<iostream>
using namespace std;
#include<deque>
//deque的插入删除
void printDeque(const deque<int>& deq)
{
for(deque<int>::const_iterator it=deq.begin();it!=deq.end();it++)
{
cout << *it << " ";
}
cout << endl;
}
//1.尾插入删除
void test01()
{
deque<int>deq1;
//1.尾插
deq1.push_back(10);
deq1.push_back(20);
// 10 20
printDeque(deq1);
//2.头插
deq1.push_front(1);
deq1.push_front(2);
// 2 1 10 20
printDeque(deq1);
//3.尾删
deq1.pop_back();
// 2 1 10
printDeque(deq1);
//4.头删
deq1.pop_front();
// 1 10
printDeque(deq1);
}
//2.insert插入
void test02()
{
deque<int>deq1;
deq1.push_back(10);
deq1.push_back(20);
deq1.push_front(100);
deq1.push_front(200);
// 200 100 10 20
printDeque(deq1);
//1.insert 插入
deq1.insert(deq1.begin(), 1000);
// 1000 200 100 10 20
printDeque(deq1);
deq1.insert(deq1.begin(), 3, 999);
// 999 999 999 1000 200 100 10 20
printDeque(deq1);
//2.按照区间插入
deque<int>deq2;
deq2.push_back(1);
deq2.push_back(2);
deq2.push_back(3);
deq1.insert(deq1.begin(), deq2.begin(), deq2.end());
// 1 2 3 999 999 999 1000 200 100 10 20
printDeque(deq1);
}
//3.删除
void test03()
{
deque<int>deq1;
deq1.push_back(10);
deq1.push_back(20);
deq1.push_front(100);
deq1.push_front(200);
// 200 100 10 20
printDeque(deq1);
//1.erase删除
deq1.erase(deq1.begin());
printDeque(deq1);
//2.清空
deq1.erase(deq1.begin(), deq1.end());
deq1.clear();
printDeque(deq1);
}
int main()
{
//test01();
//test02();
test03();
system("pause");
return 0;
}
5、deque数据存取
#include<iostream>
using namespace std;
#include<deque>
//deque的数据存取
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int>deq1;
deq1.push_back(10);
deq1.push_back(20);
deq1.push_back(30);
deq1.push_front(100);
deq1.push_front(200);
deq1.push_front(300);
// 300 200 100 10 20 30
printDeque(deq1);
//1.operator[]访问
for (int i = 0; i < deq1.size(); i++)
{
cout << deq1[i] << " ";
}
cout << endl;
//2.at()访问
for (int i = 0; i < deq1.size(); i++)
{
cout << deq1.at(i) << " ";
}
cout << endl;
cout << "deq1的第一个元素:" << deq1.front() << endl;
cout << "deq1的最后一个元素:" << deq1.back() << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
6、deque排序
对于支持随机访问的迭代器的容器,都可以利用sort算法,直接对其进行排序
#include<iostream>
using namespace std;
#include<deque>
#include<algorithm>
void printDeque(const deque<int>& deq)
{
for (deque<int>::const_iterator it = deq.begin(); it != deq.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int>deq;
deq.push_back(10);
deq.push_back(20);
deq.push_back(30);
deq.push_front(100);
deq.push_front(200);
deq.push_front(300);
// 300 200 100 10 20 30
printDeque(deq);
//排序后
sort(deq.begin(), deq.end());
printDeque(deq);
//对于支持随机访问的迭代器的容器,都可以利用sort算法,直接对其进行排序
}
int main()
{
test01();
system("pause");
return 0;
}