c++ Deque容器

【Deque 容器结构】

deque是双向开口的连续线性空间(动态将多个连续空间通过指针数组接合在一起),随时可以增加一段新的空间,所以数据想vector里面的分配,复制,释放操作不会发生。deque头尾两端分别做插入和删除操作都是常数时间。能用vector尽量使用vector,通过deque用来做队列即可,十分方便的。

【deque 用法】

容器deque和容器vector非常相似,属于序列式容器。都采用动态数组来管理元素,提供随机存取,并且有着和vector一样的接口。不同的是deque具有首尾两端进行快速插入、删除的能力。

【deque 的创建】

#include<iostream>
#include<deque>
using namespace std;
int main() {
	deque<int> c;
	cout << c.size() << endl;
	deque<int> c1(c);

	deque<int> c2(4, 10);
	for (auto i = c2.begin(); i != c2.end(); i++) {
		cout << *i << "  ";
	}
	cout << endl;
	// assign函数
	c.assign(3, 10);
	for (auto i = c.begin(); i != c.end(); i++) {
		cout << *i << "  ";
	}
	cout << endl;
	deque<int>   c3 = { 1,2,3,4,5,6 };
	//  正向迭代器
	deque<int>::iterator it;
	for (it = c3.begin(); it != c3.end(); it++) {
		cout << *it << "  ";
	}
	cout << endl;
	// 反向迭代器
	deque<int>::reverse_iterator it1;
	for (it1 = c3.rbegin(); it1 != c3.rend(); it1++) {
		cout << *it1 << "  ";
	}
	system("pause");
}

【数据访问  】

deque容器支持很多数据的访问形式,基本上与vector是一样的。

#include<iostream>
#include<deque>
using namespace std;
// 数据访问
int main() {

	deque<int> c = { 1,2,3,4,5,6 };
	// 对 deque容器数据进行访问
	// 1. at
	cout << c.at(3) << endl;
	// 2. front
	cout << c.front() << endl;
	// 3. back
	cout << c.back() <<endl;
	//  4. begin:返回第一个数据的迭代器
	cout << *c.begin() << endl;
	//  5. end:返回指向最后一个数据的下一个位置的迭代器
	cout << *(c.end() - 1) << endl;
	// 6. rbegin and rend 
	for (deque<int>::reverse_iterator it = c.rbegin(); it != c.rend(); it++) {
		cout << *it << "  ";
	}
	cout << endl;
	for (auto it = c.rbegin(); it != c.rend(); it++) {
		cout << *it << "  ";
	}

	system("pause");
}

【添加数据 insert】

insert用于向deque中插入数据。

#include<iostream>
#include<deque>
using namespace std;
int main() {

	deque<int> c;
	c.push_back(1);
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	c.push_front(2);
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	c.insert(c.begin(), 3);
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	c.insert(c.end(), 2, 10);
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;

	system("pause");
}

【deque  删除元素】

代码基本上与上篇博客中vector是一样的。

#include<iostream>
#include<deque>
using namespace std;
int main() {
	deque<int> c = {1,2,3,4,5,6,7,8,9,0};
	c.pop_back();   //删除最后一个元素 
	for (auto it = c.begin(); it != c.end(); it++) {
  	    cout << *it << " ";
	}
	cout << endl;
	// 删除头部元素
	c.pop_front(); 
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	// 删除 pos位置的数据
	c.erase(c.begin());
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	
	// 判断deque是否为空
	if (c.empty()) {
		cout << "deque 容器为空" << endl;
	}
	else {
		cout << "deque容器不为空" << endl;
	}
	// resize函数 deque队列的长度为n, 只保留队列前n个数
	c.resize(6);
	for (auto it = c.begin(); it != c.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	// 在deque中 查找某个元素
	deque<int>::iterator it = find(c.begin(), c.end(), 5);
	if (it != c.end()) {
		cout << "已经找到元素: " << *it << endl;
	}
	else {
		cout << "没有找到该元素" << endl;
	}
	// 反向遍历元素
	deque<int>::reverse_iterator it1;
	for (it1 = c.rbegin(); it1 != c.rend(); it1++) {
		cout << *it1 << "  ";
	}
	system("pause");
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值