当前位置: 首页 > news >正文

dede网站建设黄山网站开发

dede网站建设,黄山网站开发,如何给网站做宣传,备案期间网站能访问吗为了支持快速随机访问#xff0c;vector将元素连续存储#xff0c;每个元素紧挨着前一个元素存储。通常情况下#xff0c;我们不必关心一个标准库类型是如何实现的#xff0c;而只需关心它如何使用。然而#xff0c;对于vector和string,其部分实现渗透到了接口中。假定容器…为了支持快速随机访问vector将元素连续存储每个元素紧挨着前一个元素存储。通常情况下我们不必关心一个标准库类型是如何实现的而只需关心它如何使用。然而对于vector和string,其部分实现渗透到了接口中。假定容器中元素是连续存储的且容器的大小是可变的考虑向vector或string中添加元素会发生什么如果没有空间容纳新元素容器不可能简单地将它添加到内存中其他位置--因为元素必须连续存储。容器必须分配新的内存空间来保存已有元素和新元素将已有元素从旧位置移动到新空间中然后添加新元素释放旧存储空间。如果我们每添加一个新元素vector就执行一次这样的内存分配和释放操作性能会慢到不可接受。为了避免这种代价标准库实现者采用了可以减少容器空间重新分配次数的策略。当不得不获取新的内存空间时vector和string的实现通常会分配比新的空间需求更大的内存空间。容器预留这些空间作为备用可用来保存更多的新元素(提前分配更大的空间)。这样就不需要每次添加新元素都重新分配容器的内存空间了。这种分配策略比每次添加新元素时都重新分配容器内存空间的策略要高效得多。其实际性能也表现得足够好--虽然vector在每次重新分配内存空间时都要移动所有元素但使用此策略后其扩张操作通常比list和deque还要快。 管理容量的成员函数 如表9.10所示vector和string类型提供了一些成员函数允许我们与它的实现中内存分配部分互动。capacity操作告诉我们容器在不扩张内存空间的情况下可以容纳多少个元素。reserve操作允许我们通知容器它应该准备保存多少个元素。有当需要的内存空间超过当前容量时reserve调用才会改变vector的容量。如果需求大小大于当前容量reserve至少分配与需求一样大的内存空间(可能更大)。如果需求大小小于或等于当前容量reserve什么也不做。特别是当需求大小小于当前容量时容器不会退回内存空间。因此在调用reserve之后capacity将会大于或等于传递给reserve的参数。这样调用reserve永远也不会减少容器占用的内存空间。类似的resize成员函数(参见9.3.5节第314页)只改变容器中元素的数目而不是容器的容量。我们同样不能使用resize来减少容器预留的内存空间。在新标准库中我们可以调用shrink_to_fit来要求deque、vector或string退回不需要的内存空间。此函数指出我们不再需要任何多余的内存空间。但是具体的实现可以选择忽略此请求。也就是说调用shrink_to_fit也并不保证一定退回内存空间。 capacity和size 理解capacity和size的区别非常重要。容器的size是指它已经保存的元素的数目而capacity则是在不分配新的内存空间的前提下它最多可以保存多少元素。下面的代码展示了size和capacity之间的相互作用 vectorint ivec; //size 应该为0 capacity应该依赖于具体实现 cout ivec:size: ivec.size() capacity: ivec.capacity() endl; //向ivec 添加24个元素 for(vectorint::size_type ix 0; ix ! 24; ix){ivec.push_back(ix); } //size 应该为24 capacity应该大于等于24 具体依赖于标准库的实现 cout ivec:size: ivec.size() capacity: ivec.capacity() endl; 当在我们的系统上运行时这段程序得到如下输出ivec:size:0 capacity:0ivec:size:24 capacity:32我们知道一个空vector的size为0,显然在我们的标准库实现中一个空vector的capacity也为0。当向vector中添加元素时我们知道size与添加的元素数目相等。而capacity至少与size一样大具体会分配多少额外空间则视标准库具体实现而定。在我们的标准库实现中每次添加1个元素共添加24个元素会使capacity变为32。可以想象ivec的当前状态如下图所示现在可以预先分配一些额外的空间ivec.reserve(50);//将capacity的容量设置至少为50 可能会更大size的大小应该为24capacity的大小应该大于等于50 具体依赖于标准库的实现添加元素用光预留空间 while(ivec.size() ! ivec.capacity()){ ivec.push_back(0);}只要使用的空间没有超过vector的容量就不需要为此重新分配空间使用shrink_to_fit将vector超出当前大小的多余内存空间退回给系统ivec.shrink_to_fit(); 要求归还内存。这仅仅是一个请求是否归还并无保证每个vector实现都可以选择自己的内存分配策略。但是必须遵守的一条原则 是 只有当迫不得已时才可以分配新的内存空间只有在执行insert操作时size与capacity相等或者调用resize或reserve时给定的大小超过当前capacity,vector才可能重新分配内存空间。会分配多少超过给定容量的额外空间取决于具体实现。虽然不同的实现可以采用不同的分配策略但所有实现都应遵循一个原则确保用push_back向vector添加元素的操作有高效率。从技术角度说就是通过在一个初始为空的vector上调用n次push_back来创建一个n个元素的vector,所花费的时间不能超过n的常数倍
http://www.huolong8.cn/news/419720/

相关文章:

  • 网站制作的流程包括公司网站开通
  • 晋州有做网站的吗室内设计作品
  • 东营网站建设收益高微信营销 网站建设
  • 山西网络推广哪家专业seo搜索引擎优化平台
  • 开服网站建设网站系统修改不了怎么回事
  • 东莞知名企业排名seo石家庄
  • 行业网站怎么建设快对作业小程序入口
  • 渔具网站建设策划书前言律师在哪个网站做
  • 宁波做网站十大公司哪家好美食网站的设计与实现
  • 网站设计的汕头公司南宁五象新区建设投资集团网站
  • 湖南建设信息网站安徽招标投标信息网
  • 做网站运营的要求微信红包封面分销平台
  • 建一个素材网站多少钱文山城乡建设部网站首页
  • 北京网站搭建哪家好dedecms手机网站仿制
  • 长沙长沙建设网站虾米音乐 wordpress
  • 柳州柳北建设局网站可以拔下来做的网站吗
  • seo免费优化网站营销宝
  • 网站在哪里建立哪个程序做下载网站好
  • 做设计找素材那个网站最好用上海找做网站公司哪家好
  • 网站备案注销查询中国工程建设信息平台
  • 做网站可以用自己的主机徐州做英文网站的公司
  • 站长网站素材网网站开发与设计模板
  • 中国核工业二三建设有限公司阳江seo网站推广
  • 嘉定企业网站开发建设wordpress淘宝推广
  • 网站建设ppt模板下载除了个性化阶段
  • 招商网站建设免费外国wordpress后台怎样添加关键词
  • 企业网站在哪里建嘉兴市城乡规划建设管理网站
  • 国内高清视频素材网站国外网站开发发展历程
  • 怎么让别人访问我建的网站宁波网站免费建设服务平台
  • 狠狠做狠狠干免费网站网站代码验证