内容简介:翻译自:https://stackoverflow.com/questions/32299113/is-it-not-possible-to-construct-instances-in-a-loop-without-a-pointer
void foo() {
std::vector<B> bar;
for (int i = 0; i < 7; i++)
bar.push_back(B(i, i, i));
bar[3].do_stuff();
}
那么,有没有办法在不使用指针的情况下做到这一点?
或者你必须这样做:
void foo() {
std::vector<B*> bar;
for (int i = 0; i < 7; i++)
bar.push_back(new B(i, i, i));
bar[3]->do_stuff();
for (int i = 0; i < 7; i++)
delete bar[i];
}
第一个代码比第二个代码好.
B实例将是 moved since C++11 / copiespre-C 11到向量中,因此它们不会在循环后超出范围 – 仅在向量超出范围之后.
如果您想获得绝对最佳的性能,请执行以下操作:
void foo() {
std::vector<B> bar;
bar.reserve(7);
for (int i = 0; i < 7; i++)
bar.emplace_back(i, i, i);
bar[3].do_stuff();
}
这将保证只有一次重新分配,并且根据Marc Glisse的评论,元素直接在向量内部构建(而不是在那里移动或复制它们).
翻译自:https://stackoverflow.com/questions/32299113/is-it-not-possible-to-construct-instances-in-a-loop-without-a-pointer
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机科学概论(第11版)
J. Glenn Brookshear / 刘艺、肖成海、马小会、毛倩倩 / 人民邮电出版社 / 2011-10-1 / 69.00元
本书多年来一直深受世界各国高校师生的欢迎,是美国哈佛大学、麻省理工学院、普林斯顿大学、加州大学伯克利分校等许多著名大学的首选教材,对我国的高校教学也产生了广泛影响。 本 书以历史眼光,从发展的角度、当前的水平以及现阶段的研究方向等几个方面,全景式描绘了计算机科学各个子学科的主要领域。在内容编排上,本书很好地兼顾了 学科广度和主题深度,把握了最新的技术趋势。本书用算法、数据抽象等核心思想贯穿各......一起来看看 《计算机科学概论(第11版)》 这本书的介绍吧!