1009deque03

119 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

1. deque 数据存取概念

功能描述:

  • 对deque 中的数据的存取操作

函数原型:

  • at(int idx); //返回索引idx所指的数据
  • operator[]; //返回索引idx所指的数据
  • front(); //返回容器中第一个数据元素
  • back(); //返回容器中最后一个数据元素

2. 代码举例说明

#include <deque>

void printDeque(const deque<int>& h) 
{
	for (deque<int>::const_iterator it = h.begin(); it != h.end(); it++) {
		cout << *it << " ";

	}
	cout << endl;
}

//数据存取
void H01()
{

	deque<int> h;
	h.push_back(10);
	h.push_back(20);
	h.push_front(100);
	h.push_front(200);

	for (int i = 0; i < h.size(); i++) {
		cout << h[i] << " ";
	}
	cout << endl;


	for (int i = 0; i < h.size(); i++) {
		cout << h.at(i) << " ";
	}
	cout << endl;

	cout << "front:" << h.front() << endl;

	cout << "back:" << h.back() << endl;

}

int main() {

	H01();

	system("pause");

	return 0;
}

结论:

  • 除了用迭代器获取deque容器中元素,[ ]和at也可以
  • front返回容器第一个元素
  • back返回容器最后一个元素

3.deque 排序概述

功能描述:

  • 利用算法实现对deque容器进行排序

算法:

  • sort(iterator beg, iterator end) //对beg和end区间内元素进行排序

4.代码举例说明

#include <deque>
#include <algorithm>

void printDeque(const deque<int>& h) 
{
	for (deque<int>::const_iterator it = h.begin(); it != h.end(); it++) {
		cout << *it << " ";

	}
	cout << endl;
}

void H01()
{

	deque<int> h;
	h.push_back(10);
	h.push_back(20);
	h.push_front(100);
	h.push_front(200);

	printDeque(h);
	sort(h.begin(), h.end());
	printDeque(h);

}

int main() {

	H01();

	system("pause");

	return 0;
}

结论: sort算法非常实用,使用时包含头文件 algorithm即可

4.deque详细解释说明

  • 双端队列(deque)是什么?

  • 双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector,

  • 双端队列(deque)属于STL(Standard Template Library, 标准模板库)所以使用的也是也是需要先引入:

#include <deque>
  • Deque 容器是连续的空间,连续线性空间总是令我们联想到 array 和 vector。array 无法成长,vector 虽可成长,却只能向尾端成长,而且其成 长其实是一个假象,事实上第一步 是申请更大空间 然后原数据复制新空间 最后释放原空 间 三步骤,如果不是 vector 每次配置新的空间时都留有余裕,其成长假象所带来的代价是非常昂贵的。 Deque 是由一段一段的定量的连续空间构成。
  • 一旦有必要 在 deque 前端或者尾端增加新的空间,便配置一段连续定量的空间,串接在 deque 的头端或者尾端。Deque 最大的工作就是维护这些分段连续的内存空间的整 体性的假象,并提供随机存取的接口,避开了重新配置空间,复制,释放的轮回, 代价就是复杂的迭代器架构。
  • 既然 deque 是分段连续内存空间,那么就必须有中 央控制,维持整体连续的假象,数据结构的设计及迭代器的前进后退操作颇为繁 琐。Deque 代码的实现远比 vector 或 list 都多得多。 Deque 采取一块所谓的 map(注意,不是 STL 的 map 容器)作为主控,这里所谓的 map 是一小块连续的内 存空间,其中每一个元素(此处成为一个结点)都是一个指针,指向另一段连续性内 存空间,称作缓冲区。缓冲区才是 deque 的存储空间的主体。