栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

容器适配器复习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

容器适配器复习

实际上,容器适配器在工作中使用的不是特别多,所以对这些东西的个别细节难免有些遗忘,今天这里回顾一下。

什么是适配器

适配器类底层组合了已经有的容器对象,对外开发一些接口,这些接口实际上是对容器接口的封装,或者直接调用容器对象的方法。
容器适配器没有自己的数据结构,没有自己的迭代器,实现全部依赖于底层的组合的容器。

比如,

template >
class stack
{
public:
	void pop()
	{
		con.pop_back();
	}
	void push(const T &value)
	{
		con.push_back(value);
	}
private:
	Container con;
};
STL中的容器适配器 stack
  • push
  • pop
  • top
  • empty
  • size

底层使用的是deque

为何不使用vector?

  • vector的起始大小是0,而deque起始的size是4096/sizeof(T), vector需要不停的扩容,效率低
  • vector底层需要大片的连续的内存块,存储大量数据时,deque相对更友好。
queue
  • push
  • pop
  • front
  • back
  • empty
  • size

底层使用的deque

为何不使用vector?

  • 如果使用vector,出队效率会比较低下;
  • vector底层需要大片的连续的内存块,存储大量数据时,deque相对更友好。
priority_queue,默认大根堆
  • push
  • pop
  • top
  • empty
  • size

底层使用的是vector

为何使用vector?

  • 底层默认将数据组成一个大根堆,节点之间的关系使用下标来组织,需要内存是一块连续的内存,所以使用vector
  • 不使用deque,因为deque的二维数组之间不一定是连续的,计算下标是没有意义的。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号