c++STLdeque容器

deque即双端队列。头文件#include
deque是双端数组可以对头端进行插入删除操作
deque和vector的区别:
1.vector对于头部的插入删除效率很低,数据量越大效率越低
2.deque相对而言,对头部的插入删除效率比vector快
3.vector访问元素时的速度会比deque快,这和两者的内部实现有关。
vector相当于的数组,而deque内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据。中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。
deque的构造函数

void print(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin();it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
	deque<int>d1;
	for (int i = 1; i <= 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);//1 2 3 4 5 6 7 8 9 10
	deque<int>d2(d1.begin(), d1.end());
	print(d2);//1 2 3 4 5 6 7 8 9 10
	deque<int>d3(10, 100);
	print(d3);//100 100 100 100 100 100 100 100 100 100
	deque<int>d4(d1);
	print(d4);//1 2 3 4 5 6 7 8 9 10
}

deque赋值

void print(const deque<int>& d)
{
	for (deque<int>::const_iterator it = d.begin();it != d.end(); it++)
	{
		cout << *it << " ";
	}
	cout << endl;
}
void test01()
{
	deque<int>d1;
	for (int i = 1; i <= 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);//1 2 3 4 5 6 7 8 9 10
	deque<int>d2;
	d2 = d1;
	print(d2);//1 2 3 4 5 6 7 8 9 10
	deque<int>d3;
	d3.assign(d1.begin(), d1.end());
	print(d3);//1 2 3 4 5 6 7 8 9 10
	deque<int>d4;
	d4.assign(10, 100);
	print(d4);//100 100 100 100 100 100 100 100 100 100
}

deque大小操作

void test01()
{
	deque<int>d1;
	for (int i = 1; i <= 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);//1 2 3 4 5 6 7 8 9 10
	deque<int>d2;
	if (!d1.empty())
	{
		cout << "容器不为空" << endl;
	}
	cout << "容器中元素个数为:" << d1.size() << endl;

	//容器不为空
	//容器中元素个数为:10
}

成员函数resize(num)重新指定容器的长度为num,若容器变长,则以默认值填充位置,如果容器变短,则末尾超出容器的元素被删除。
resize(num,elem)同理。
deque容器的插入操作
成员函数:
push_back() 在容器末端添加一个元素
push_front() 在容器头部添加一个元素
pop_back() 删除容器最后一个元素
pop_front() 删除容器第一个元素

void test01()
{
	deque<int>d1;
	for (int i = 1; i <= 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);//1 2 3 4 5 6 7 8 9 10
	deque<int>::iterator it = d1.begin();
	d1.insert(it, 1000);
	print(d1);//1000 1 2 3 4 5 6 7 8 9 10
	deque<int>::iterator it2 = d1.begin();
	d1.insert(it2, 2, 100);
	print(d1);//100 100 1000 1 2 3 4 5 6 7 8 9 10
	deque<int>d2 = d1;
	deque<int>::iterator it3 = d2.begin();
	it3 += 3;
	d2.insert(it3, d1.begin(), d1.end());
	print(d2);//100 100 1000 100 100 1000 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
	d1.clear();//清空容器所有数据;
	d2.erase(d2.begin());//擦除d2.begin()所指向的数据
	d2.erase(d2.begin(), d2.end());//擦除区间内的数据
}

deque中数据的获取:
该容器可以跳跃式访问
[]和at都可以获取,懒得写了

void test01()
{
	deque<int>d1;
	for (int i = 1; i <= 10; i++)
	{
		d1.push_back(i);
	}
	print(d1);//1 2 3 4 5 6 7 8 9 10
	cout << d1.front() << endl;//获取第一个元素
	cout << d1.back() << endl;//获取最后一个元素
}

关于deque容器的排序问题
deque容器并未提供用于排序的成员函数。事实上能够跳跃式访问的容器都没有提供成员函数sort。
对于支持随机访问的迭代器的容器,都可以直接使用sort函数进行排序。头文件#include<algorithm>;

无了…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值