deque,list容器

deque容器是以双端队列的形式来组织元素的,可以在容器的头部和尾部高效的插入和删除元素。
1.deque容器的应用场景是先进先出的场景,像排队的队列。
2.可以使用下标来访问deque容器中的元素。
3.deque的组织方式导致其大小和容量总是相等的。
deque和vector的不同之处
1.deque为双向开口,可以在头部和尾部高效的插入和删除(而vector只可以尾部插入和删除)
2.deque的内部会多一个间接地过程,元素的存取和迭代器的效率相对比vector要慢一些。
3.迭代器需要在不同的地方跳转,因此其必须为一个智能指针。
4.在对内存有限制的系统中,deque可以比vector内含更多元素。
5.deque不支持对内存重分配的时机的控制,除了在头尾两端在其他位置插入和删除都会导致迭代器失效。
6.deque内存区块不再被使用的时候,会被释放。
deque和vector的相似之处
1.在中部进行插入和删除的速度相对比较慢。
2.迭代器和vector相似方便随机存取。
list容器具有vector和deque所不具备的条件是在容器的任何一个位置都可以比较高效的插入和删除
1.list的缺点是无法通过位置来直接访问序列中的元素
2.list容器中每个T对象,都被包装在一个内部结点对象中,结点对象中含有两个指针一个指向下一个元素,另一个指向前一个元素。
3.第一个元素的前向指针为空,最后一个元素的后向指针为空。
最后再来看一下forward_list, forward_list具有单向链接性。
fordward_list和list的最主要的区别是forward_list只能从头到尾遍历不可以反向遍历。
1.无法使用反向迭代器,只能自增。
2.没有最后一个可以返回的成员函数back(),只有第一个返回的成员函数front();
3.因为只可以通过自增到达前面的终点,因此其也不可以使用push_back(),pop_back(),emplace_back()。

#include "stdafx.h"
#include<deque>
#include<iostream>
#include<string>
using std::deque;
using std::cout;
using std::endl;
using std::string;
int _tmain(int argc, _TCHAR* argv[])
{
	deque<int> d1;//使用默认构造函数没有分配内存,等到插入元素后再分配内存
	deque<int> d2(10);//指定最初分配内存的空间,由于没有初始化所以最先的元素的都为0
	cout << "d1.size:" << d1.size() << endl;
	cout << "d2.size:" << d2.size() << endl;
	d1.push_back(1);//尾部添加
	d1.push_front(4);//头部添加
	d1.pop_back();//尾部删除
	d1.pop_front();//头部删除
	d2.emplace_front(2);//在序列的开始处生成一个元素。
	for (deque<int>::iterator it = d1.begin(); it != d1.end(); it++)
	{
		
		cout << *it << "\t";
	}
	cout << endl;
	for (deque<int>::iterator it = d2.begin(); it != d2.end(); it++)
	{
		cout << *it << "\t";
	}
	cout << endl;
	deque<string> d3{ "wordhd", "hello", "first" ,"nihao","sjado"};
	for (deque<string>::iterator it = d3.begin(); it != d3.end(); it++)
	{
		cout << *it<<"\t";
	}
	cout << endl;
	deque<string> words_part{ std::begin(d3), std::begin(d3) + 5 };//和d3的前五个元素具有相同的值
	for (deque<string>::iterator it = words_part.begin(); it != words_part.end(); it++)
	{
		cout << *it << "\t";
	}
	cout << endl;
	cout << d3.at(2) << endl;
	
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值