4、deque容器

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值