gpt4 book ai didi

c++ - STL容器,创建/销毁的速度

转载 作者:行者123 更新时间:2023-11-28 01:05:25 38 4
gpt4 key购买 nike

背景:我正在为我的游戏引擎创建一个高效(希望如此)的碰撞检测系统——当我在屏幕上放置大量物体时,它引入了一个小问题。我的问题是:

我将定期添加和删除对象,并且我有几个管理器类可以在任何给定时间跟踪对象,这意味着要从容器中添加和删除这些对象。对于其中的大部分,我一直在使用 vector 和双端队列,这很好,但是我非常想升级系统的核心速度。

因此问题是:哪个容器(((是否为 STL)[最好是前者])给我最快的(顺序无关紧要)添加、删除和随机访问元素?

我一直在想我会使用一个集合,我会遍历元素,尽管不像我使用其他三个函数那样频繁。

附加信息:本质上,我将屏幕分成未定义大小的网格,当对象移动时,我将找到左上角当前所在的正方形,然后右下角(当然假设对象是方形的)因此我会知道对象占据的所有当前网格位置。当我进行碰撞检测时,我只会对不止一个对象的网格位置进行检查,当我检查碰撞时它有望比我以前的系统快得多 =]

最佳答案

std::set 不太可能提供更好的性能:它是一个基于节点的容器,因此每个元素都需要动态分配,这可能会证明是昂贵的。

考虑坚持使用 std::vector:它提供对序列中所有元素的恒定时间随机访问以及在序列末尾的恒定时间插入和删除。

既然你说顺序无关紧要,你也可以通过从序列的末尾移动元素来替换被删除的元素,从而从序列的中间移除任何元素;像这样:

void remove_element(std::vector<Entity>& v, std::vector<Entity>::iterator it)
{
std::vector<Entity>::iterator last_element_it = v.end() - 1;
if (it != last_element_it) {
using std::swap;
swap(*it, *last_element_it);
}
v.erase(last_element_it);
}

关于c++ - STL容器,创建/销毁的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6448715/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com