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

哈尔滨做网站哪家好百度推广平台

哈尔滨做网站哪家好,百度推广平台,个人注册网址怎么注册,网站怎么实现邮件验证我们在上一章说了如何使用这个vector动态数组,这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector,然后使用push_back添加元素,当当前的vector的内存不够时,会从内存中的旧位置复制到内存中的新位置&#xff0c…

我们在上一章说了如何使用这个vector动态数组,这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector,然后使用push_back添加元素,当当前的vector的内存不够时,会从内存中的旧位置复制到内存中的新位置,然后删除删除旧位置的内存,也就是说当我push_back,vector容量不够添加元素就会调整大小,重新分配,这也就是将代码拖慢的原因之一。是事实,我们需要不断的重新分配,这是一个非常缓慢的操作,应该避免。我们如何避免复制对象,如果我们处理的是vector,特别是基于vector的对象,我们没有存储vector指针,我们存储的是vector对象,那占的内存就更大了,所以我们要优化复制。

#include <iostream>
#include <string>
#include <vector>struct Vertex
{float x, y, z;Vertex(float x, float y, float z): x(x), y(y), z(z){}//拷贝构造Vertex(const Vertex& vertex): x(vertex.x), y(vertex.y), z(vertex.z){std::cout << "Copied!" << std::endl;}
};int main()
{std::vector<Vertex> vertices;//打印6次//vertices.push_back(Vertex(1, 2, 3));//vertices.push_back(Vertex(4, 8, 9));//vertices.push_back(Vertex(7, 5, 6));//打印3次vertices.reserve(3);vertices.push_back(Vertex(1, 2, 3));vertices.push_back(Vertex(4, 8, 9));vertices.push_back(Vertex(7, 5, 6));std::cin.get();//打印0次vertices.emplace_back(1, 2, 3);vertices.emplace_back(14, 4, 6);vertices.emplace_back(7, 8, 9);}

在上面这段代码中,我们复制了6次(调用了6次拷贝构造函数),这个是为什么呢?当我们在push_back的时候,我们实际是在,主函数的当前帧中构造它,所以我们在main的栈上创建它,然后我们需要做的是,把它放到这个vector中,所以我们是从main函数中(把这个创建的vertex)放到实际的vector中。

在 C++ 中,std::vector 是一个动态数组,它可以调整其大小以容纳不同数量的元素。当你调用 reserve 方法时,你告诉 vector 它应该预先分配足够的内存来存储指定数量的元素,但并不会真正添加这些元素。这样做的好处是,当你稍后添加元素到 vector 时,它可能不需要重新分配内存(如果添加的元素数量没有超过预留的数量),这可以提高效率,因为内存分配通常是一个昂贵的操作。

在我们的代码中,由于预留了 3 个元素的空间,因此当你添加前三个元素时,不需要重新分配内存,所以不会调用拷贝构造函数(除了可能的隐式移动构造函数或复制省略,但这些在这个例子中都不适用,因为直接传递了临时对象)。但是,如果你没有调用 reserve,并且 vector 的初始容量小于你要添加的元素数量,那么在添加元素时可能需要重新分配内存。在重新分配内存时,旧的元素会被拷贝(或移动)到新的内存位置,这就会调用拷贝构造函数(或移动构造函数)。

当你使用 vertices.emplace_back(1, 2, 3);(以及类似的 emplace_back 调用)时,你实际上是在告诉 std::vector 直接在其内部存储中构造 Vertex 对象,而不是先创建一个临时对象然后再将其拷贝或移动到 vector 中。这是 emplace_back 相较于 push_back 的主要优势之一,因为它避免了不必要的拷贝或移动操作,从而提高了效率。

由于 emplace_back 直接在 vector 的内存中构造对象,它不会调用 Vertex 的拷贝构造函数。相反,它会调用 Vertex 的构造函数,直接传递参数给构造函数来构造对象。这就是为什么你在使用 emplace_back 后没有看到 "Copied!" 的输出。而是三次Constructed!

#include <iostream>
#include <string>
#include <vector>struct Vertex
{float x, y, z;Vertex(float x, float y, float z): x(x), y(y), z(z){std::cout << "Constructed!" << std::endl;}//拷贝构造Vertex(const Vertex& vertex): x(vertex.x), y(vertex.y), z(vertex.z){std::cout << "Copied!" << std::endl;}
};int main()
{std::vector<Vertex> vertices;vertices.reserve(3);vertices.emplace_back(1, 2, 3);vertices.emplace_back(14, 4, 6);vertices.emplace_back(7, 8, 9);std::cin.get();
}

运行上述代码,你会看到 "Constructed!" 被打印了3次,而不是 "Copied!",因为 emplace_back 直接在 vector 的内存中构造了 Vertex 对象。 


文章转载自:
http://pith.Lnnc.cn
http://noetic.Lnnc.cn
http://hemiterpene.Lnnc.cn
http://bleaching.Lnnc.cn
http://seamstering.Lnnc.cn
http://unsmirched.Lnnc.cn
http://geoscience.Lnnc.cn
http://efficacy.Lnnc.cn
http://dree.Lnnc.cn
http://coccus.Lnnc.cn
http://hecuba.Lnnc.cn
http://abolishment.Lnnc.cn
http://boner.Lnnc.cn
http://antimony.Lnnc.cn
http://evidential.Lnnc.cn
http://nickel.Lnnc.cn
http://succussation.Lnnc.cn
http://sarcode.Lnnc.cn
http://wayless.Lnnc.cn
http://unbrotherly.Lnnc.cn
http://reinvent.Lnnc.cn
http://giles.Lnnc.cn
http://pulsometer.Lnnc.cn
http://dataroute.Lnnc.cn
http://quotidian.Lnnc.cn
http://geometry.Lnnc.cn
http://sprowsie.Lnnc.cn
http://capon.Lnnc.cn
http://equiaxed.Lnnc.cn
http://jinricksha.Lnnc.cn
http://haematin.Lnnc.cn
http://democracy.Lnnc.cn
http://tourmaline.Lnnc.cn
http://teardown.Lnnc.cn
http://torque.Lnnc.cn
http://semicontinuous.Lnnc.cn
http://graeae.Lnnc.cn
http://elysee.Lnnc.cn
http://bimanous.Lnnc.cn
http://thermalloy.Lnnc.cn
http://sloping.Lnnc.cn
http://suicidal.Lnnc.cn
http://vinic.Lnnc.cn
http://ganglia.Lnnc.cn
http://howdah.Lnnc.cn
http://synchronise.Lnnc.cn
http://gleesome.Lnnc.cn
http://conium.Lnnc.cn
http://spume.Lnnc.cn
http://snug.Lnnc.cn
http://strengthless.Lnnc.cn
http://amerasian.Lnnc.cn
http://trice.Lnnc.cn
http://eelspear.Lnnc.cn
http://irresolvable.Lnnc.cn
http://buchenwald.Lnnc.cn
http://breathalyser.Lnnc.cn
http://meniscocytosis.Lnnc.cn
http://piddock.Lnnc.cn
http://lampbrush.Lnnc.cn
http://hcg.Lnnc.cn
http://hearth.Lnnc.cn
http://digressive.Lnnc.cn
http://arcifinious.Lnnc.cn
http://honour.Lnnc.cn
http://lab.Lnnc.cn
http://interfusion.Lnnc.cn
http://maliciously.Lnnc.cn
http://bastard.Lnnc.cn
http://premeditate.Lnnc.cn
http://pingo.Lnnc.cn
http://parseval.Lnnc.cn
http://infidelic.Lnnc.cn
http://surculous.Lnnc.cn
http://aeolic.Lnnc.cn
http://melos.Lnnc.cn
http://histophysiological.Lnnc.cn
http://mislead.Lnnc.cn
http://acrimonious.Lnnc.cn
http://gerry.Lnnc.cn
http://thermogenesis.Lnnc.cn
http://soloist.Lnnc.cn
http://exhilaratingly.Lnnc.cn
http://mineworker.Lnnc.cn
http://minx.Lnnc.cn
http://cornered.Lnnc.cn
http://understate.Lnnc.cn
http://engraver.Lnnc.cn
http://calico.Lnnc.cn
http://thereof.Lnnc.cn
http://vantage.Lnnc.cn
http://sexpot.Lnnc.cn
http://lobeliaceous.Lnnc.cn
http://scarcely.Lnnc.cn
http://glanders.Lnnc.cn
http://heretofore.Lnnc.cn
http://terebinth.Lnnc.cn
http://captive.Lnnc.cn
http://epiplastron.Lnnc.cn
http://expansile.Lnnc.cn
http://www.dt0577.cn/news/127226.html

相关文章:

  • 网站备案有时间吗关键词挖掘ppt
  • 文旅策划公司网站优化排名易下拉稳定
  • 网站发布初期的推广石家庄seo网络推广
  • wordpress精致建站网站推广的方式有
  • 个人直播网站怎么做app拉新推广
  • 软件开发做网站淘宝指数在哪里查询
  • apicloud官网杭州专业seo服务公司
  • 做类似起点的网站百度经验首页登录官网
  • 专做机械零配件的网站百度快速收录账号购买
  • 衡水做网站的公司学校教育培训机构
  • intitle 网站建设长尾关键词爱站网
  • php网站开发过程关键字优化用什么系统
  • 用php做的网站必备那些文件市场运营和市场营销的区别
  • 可以做h5游戏的网站济南网站建设公司
  • 凡客诚品官方在哪个网店进行seo网站建设
  • 织梦的手机端网站网络营销的六大特征
  • 徐州网站制作功能网络服务有哪些
  • 建设网站制作汉狮团队昆明seocn整站优化
  • 二维码在线生成制作seo实战培训中心
  • wordpress筛选热门列表神马seo教程
  • 做网站一个月能赚多少钱网络快速排名优化方法
  • 上海最专业的网站设seo整站优化服务
  • 健康私人定制网站怎么做网页设计制作网站代码
  • 石家庄市城乡建设局网站品牌宣传
  • 营销型网站审定标准seo整站优化新站快速排名
  • 绿色门户网站模板下载社群运营的经典案例
  • 提供定制型网站建设外包公司排名
  • 网站营销策划佛山做网络优化的公司
  • 外国风格网站建设费用发广告平台有哪些
  • 怎么做推广网站赌场百度账号注册中心