STL 双端队列(deque)

目录

双端队列(deque)

初始化遍历deque

增加元素

删除元素

其他操作


双端队列(deque)

deque(double ended queue,双向队列),和向量(vector)类似,可以头部的快速的插入和删除.

同样支持随机访问

其实他和vector差别很少,vector有capacity是容量,deque中没有.

deque中有前插前删,vector中没有.在任何标准里其实也没有明确的说明何时何地选他们两个哪一个.

初始化遍历deque

#include 
#include 

using namespace std;

int main()
{
	deque d;
	deque d2(3);	//开辟三个元素
	deque d3(3, 1);	//初始化3个元素 都是1
	deque d4(d2);	//用一个deque初始化另一个
	deque d5(d3.begin(), d3.end());	//用迭代器初始化
	deque d6 = { 1,2,34,324,5,5 };	//直接初始化
	int arr[] = { 3,1,2,4,5,1,2,2,5,3 };
	deque d7(arr, arr + 10);	//赋值数组区间
	deque d8;
	d8.assign(3, 1);	//初始化3个元素 都是1
	d.assign(d3.begin(), d3.end());	//用迭代器初始化


	for (auto it = d7.begin(); it != d7.end(); ++it)
	{
		cout << *it << " ";	//3 1 2 4 5 1 2 2 5 3
	}
	cout << endl;

	//支持随机访问
	for (int i = 0; i < d6.size(); ++i)
	{
		cout << d6[i] << " ";	//1 2 34 324 5 5
	}
	cout << endl;

	//at 这东西就是更安全仅此而已
	for (int i = 0; i < d.size(); ++i)
	{
		cout << d.at(i) << " ";	//1 1 1
	}



	return 0;
}

增加元素

#include 
#include 

using namespace std;

int main()
{
	deque d;
	deque d2 = { 3,3,3 };

	//在开始迭代器位置插入1
	d.insert(d.begin(), 1);	//1

	//在开始迭代器后移1位处插入2个2
	d.insert(d.begin() + 1, 2, 2);	//122

	//在开始迭代器后移3位处插入d2的迭代器区间
	d.insert(d.begin() + 3, d2.begin(), d2.end());	//122333

	//前插
	d.push_front(0);	//0122333

	//后插
	d.push_back(4);		//01223334

	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//0 1 2 2 3 3 3 4
	}
	cout << endl;

	return 0;
}

删除元素

#include 
#include 

using namespace std;

int main()
{
	deque d = { 1,2,3,4,5,6,7,8,9,0 };

	//删除第一个元素 
	d.erase(d.begin());	//2 3 4 5 6 7 8 9 0 

	//删除迭代器区间 区间都是左闭右开
	d.erase(d.begin(), d.begin() + 3);	//5 6 7 8 9 0 

	//头删
	d.pop_front();	//6 7 8 9 0 

	//尾删
	d.pop_back();	//6 7 8 9

	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//6 7 8 9
	}
	cout << endl;

	//删除所有元素
	d.clear();
	cout << d.size() << endl;	//0

	return 0;
}

其他操作

#include 
#include 

using namespace std;

int main()
{
	deque d;

	//判断是否为空
	if (d.empty())
	{
		cout << "is empty" << endl;	//会执行本条语句
	}

	d = { 1,2,3,4,5,6,7,8,9 };

	//初始迭代器 指向第一个元素
	auto it_begin = d.begin();

	//尾部迭代器 指向最后一个元素的下一位置
	auto it_end = d.end();

	//逆向初始迭代器 指向最后一个元素
	auto it_rbegin = d.rbegin();

	//逆向尾部迭代器 指向第一个元素的上一个位置
	auto it_rend = d.rend();

	//返回第一个元素
	cout << d.front() << endl;	//1

	//返回最后一个元素
	cout << d.back() << endl;	//9

	//返回最大可容纳元素
	cout << d.max_size() << endl;	//1073741823

	//改变大小 小于原空间时会截断数据 大于原空间时多出的元素会初始化为0
	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//1 2 3 4 5 6 7 8 9
	}
	cout << endl;
	cout << d.size() << endl;	//9
	d.resize(5);
	cout << d.size() << endl;	//5
	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//1 2 3 4 5
	}
	cout << endl;

	//指定多出的元素初始化为1
	d.resize(10, 1);
	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//1 2 3 4 5 1 1 1 1 1
	}
	cout << endl;

	//交换两个元素 会取较小空间
	deque d2 = { 3,2,1 };
	d.swap(d2);
	for (int i = 0; i < d.size(); ++i)
	{
		cout << d[i] << " ";	//321
	}
	cout << endl;

	for (int i = 0; i < d.size(); ++i)
	{
		cout << d2[i] << " ";	//123
	}
	cout << endl;

	return 0;
}

你可能感兴趣的:(C++,c++,python,c语言,stl)