C++ deque 容器
文章目录
前言
本文包含deque容器基本概念、deque构造函数、deque赋值操作、deque大小操作、deque插入和删除、deque数据存取、deque排序。
1 deque 容器基本概念
功能: 双端数组,可以对头端进行插入删除操作
deque 与 vector 区别:
(1)、vector 对于头部的插入删除效率低,数据量越大,效率越低
(2)、deque 相对而言,对头部的插入删除速度回比 vector 快
(3)、vector 访问元素时的速度会比 deque 快,这和两者内部实现有关
deque 内部工作原理:
(1)、deque 内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
(2)、中控器维护的是每个缓冲区的地址,使得使用 deque 时像一片连续的内存空间
(3)、deque 容器的迭代器也是支持随机访问的
2 deque 构造函数
功能描述: deque 容器构造
函数原型:
(1)、deque<T>
deqT; 默认构造形式
(2)、deque(beg, end);
构造函数将 [beg, end) 区间中的元素拷贝给本身
(3)、deque(n, elem);
构造函数将 n 个 elem 拷贝给本身
(4)、deque(const deque &deq);
拷贝构造函数
// deque双端数组容器构造函数
#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间
#include <deque> // 使用deque双端数组容器,需包含头文件deque
// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) {
// 使用引用方式&,传入deque<int>类型的形参d
// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型
// const_iterator只读迭代器;iterator普通迭代器
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值
cout << *it << " "; // it是个迭代器类型,本是是个指针,需使用*解引用
}
cout << endl;
}
void test() {
// 1、默认构造方式,无参构造
deque<int> d;
for (int i = 0; i < 10; i++)
{
// push_back()向容器尾部插入数据i
d.push_back(i);
}
Fun_Print(d); // 0 1 2 3 4 5 6 7 8 9
// 2、将d容器开始迭代器到结束迭代器之间的数据元素,拷贝给d1容器
deque<int> d1(d.begin(), d.end());
Fun_Print(d1); // 0 1 2 3 4 5 6 7 8 9
// 3、将10个100拷贝给d2容器
deque<int> d2(10, 100);
Fun_Print(d2); // 100 100 100 100 100 100 100 100 100 100
// 4、拷贝构造
deque<int> d3(d2);
Fun_Print(d3); // 100 100 100 100 100 100 100 100 100 100
}
int main() {
test();
system("pause"); // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果
return 0; // 程序正常退出
}
3 deque 赋值操作
功能描述: 给 deque 容器进行赋值
函数原型:
(1)、deque& operator=(const deque &deq);
重载等号操作符
(2)、assign(beg, end);
将 [beg, end) 区间中的数据拷贝赋值给本身
(3)、assign(n, elem);
将 n 个 elem 拷贝赋值给本身
// deque双端数组容器赋值
#include <iostream> // 包含标准输入输出流头文件
using namespace std; // 使用标准命名空间
#include <deque> // 使用deque双端数组容器,需包含头文件deque
// const对此容器只是只读,不可以修改
void Fun_Print(const deque<int>& d) {
// 使用引用方式&,传入deque<int>类型的形参d
// deque<int>::iterator 拿到deque<int>这种容器的迭代器类型;每个容器都有一个专属的迭代器类型
// const_iterator只读迭代器;iterator普通迭代器
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
//*it= 100; // 报错,容器中数据不可修改:表达式必须是可修改的左值
cout << *it << " "