首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shrink_to_fit()与交换技巧

shrink_to_fit()与交换技巧
EN

Stack Overflow用户
提问于 2017-04-27 20:17:16
回答 2查看 3.2K关注 0票数 15

我有一个游戏,特定的游戏对象同时产卵,然后当它们被摧毁/杀死时就绝望了。游戏对象是std::vector中的元素,我希望将内存使用量降到最低。我习惯了交换技巧,

代码语言:javascript
复制
std::vector<gameObject>(gameObjectVector.begin(), gameObjectVector.end()).swap(gameObjectVector);

但是我注意到了来自C++11的内置C++11,但是它具有线性复杂性,而交换技巧是常量的。交换技巧不是各方面都有优势吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-27 20:20:38

交换技巧实际上不是固定时间。执行实际交换的成本确实是O(1),但是还有std::vector析构函数触发和清理所有分配空间的成本。如果底层对象具有非平凡的析构函数,这可能会花费Ω(n),因为Ω需要调用这些析构函数。还需要为存储在初始向量中的所有元素调用副本构造函数,这类似于Ω(n)。

因此,这两种方法应该具有大致相同的复杂性,除了shrink_to_fit更清楚地传达了意图,并且可能更容易对编译器进行优化。

票数 18
EN

Stack Overflow用户

发布于 2017-05-03 05:18:42

接受的答案,也得到了isocpp.org的功能是错误的。

shrink_to_fit非约束性的需求。就我个人而言,我认为ISO把它保留为非投标(没有对发生的事情提供更有力的保证)是愚蠢的,因为这是令人困惑的,但也许他们有很好的理由(Tm)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43667175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档