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

网站风格对比信息表商丘网络推广哪家好

网站风格对比信息表,商丘网络推广哪家好,做公司网站需注意什么,哈尔滨做网站公司我们在上一章说了如何使用这个vector动态数组#xff0c;这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector#xff0c;然后使用push_back添加元素#xff0c;当当前的vector的内存不够时#xff0c;会从内存中的旧位置复制到内存中的新位置#xff0c…我们在上一章说了如何使用这个vector动态数组这章我们说说如何更好的使用它以及它是如何工作的。当你创建一个vector然后使用push_back添加元素当当前的vector的内存不够时会从内存中的旧位置复制到内存中的新位置然后删除删除旧位置的内存也就是说当我push_backvector容量不够添加元素就会调整大小重新分配这也就是将代码拖慢的原因之一。是事实我们需要不断的重新分配这是一个非常缓慢的操作应该避免。我们如何避免复制对象如果我们处理的是vector特别是基于vector的对象我们没有存储vector指针我们存储的是vector对象那占的内存就更大了所以我们要优化复制。 #include iostream #include string #include vectorstruct 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::vectorVertex 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 vectorstruct 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::vectorVertex 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://www.w-s-a.com/news/709145/

相关文章:

  • 免费网站服务陕西省咸阳市建设银行网站
  • 网站建设活动计划做网站意义
  • 莱芜新闻主持人名单seo sem 外贸建站 网站建设 文化墙设计
  • 易语言可以做网站嘛赣州网站建设开发
  • 网站建设规范布局网站建设费往什么科目
  • 乐清手机网站设计哪个汽车网站汽贸店免费做
  • 网站建设课程总结报告推广软文
  • 企业网站哪里可以做烟台seo网站推广
  • 怎样建设网站优化珠海网站建设开发
  • 泰兴住房和城乡建设厅网站福州app开发
  • 免费制作公司网站seo前线
  • 导购网站怎么推广有网站源码怎么搭建网站
  • 网站开发问题杭州制作公司网站
  • 网站推广seo是什么wordpress 去除顶部
  • 建筑学不会画画影响大吗电子商务沙盘seo关键词
  • 重庆网站建设找承越上海建设工程招投标网
  • 网站建设四个步骤下单的网站建设教程
  • 网站建设合同的验收表响应式网站建设哪家好
  • 手机网站建设视频长沙百家号seo
  • 网站未备案怎么访问网站开发前端需要学什么
  • 正黄集团博弘建设官方网站wordpress设置固定链接和伪静态
  • wordpress 建网站视频如何实现网站生成网页
  • 杭州品牌网站建设推广个人的网站建设目标
  • 济南有哪些网站是做家具团购的贸易公司自建免费网站
  • wap网站psd成立公司在什么网站
  • 网站建设婚恋交友聊城网站建设费用
  • 沈阳网站建设联系方式尉氏县金星网架公司
  • 医院网站建设实施方案基础微网站开发信息
  • 网站建设开发服务费记账百度指数搜索
  • 网站建设备案流程windows优化大师有必要安装吗