【发布时间】:2012-11-17 19:38:39
【问题描述】:
第一次在这里发帖,这让我发疯了!我解释的不是很清楚,所以我试着举个例子。
我正在尝试检索一个非常大 (100k) 向量中的元素以将其擦除。迭代槽需要很长时间......所以我尝试了这个:
这是我列表中的一个小例子。它存储在我的单例粒子发射器类中。
vector<Particle> particles;
particles.reserve(100);
这是我的粒子的精简版
class Particle
{
Particle:
~Particle:
void Delete
{
int listNum = (this - &particles[0]);
particles.erase(particles.begin+listNum);
}
};
这一切都很好,但我不想将每个粒子都保存在堆栈中,所以我想更改它
vector<Particle> particles;
进入
vector<Particle*> particles;
现在我的问题是:如果向量由粒子指针组成,是否仍然可以从列表中删除和擦除粒子?
我不确定我是否清楚我的问题,但我希望你能理解!
或者,如果有人知道更好的性能明智的解决方案,我想听听!
提前致谢!
【问题讨论】:
-
你的
Particle类不应该知道是什么容器保存它。 -
粒子有多大?如果复制构造很昂贵,那么您应该存储为指针,但使用指针容器(例如
boost::ptr_vector),我同意克里斯,将容器知识灌输到类不是一个好主意...... -
另外,为了减少搜索时间,你可以有一个排序的向量吗?
-
“但我不想将每个粒子都保存在堆栈中”
std::vector的存储在堆上。 -
@chris:一般来说建议不错,但有时出于性能原因,您需要偏离最佳实践。
标签: c++ pointers vector reference erase