显然,它将根据您使用的编译器而有所不同,但我很好奇在使用vector<vector<largeObject>>和vector<vector<largeObject>*>时的性能问题,特别是在c++中。具体来说:
假设外部向量已满,并且希望开始将元素插入到第一个内部向量中。如果外部向量只存储指针,而不是整个内部向量,那么如何将其存储在内存中。是必须移动整个外部向量来获得更多空间,还是移动内部向量(假设没有预先分配空间),从而导致外部向量出现问题?
谢谢
发布于 2011-01-18 09:57:54
向量在内部是一个指针,所以向量的指针有点过头了。
当需要多态内容时,通常使用指针或智能指针的向量。
在C++03中,插入更多的向量或(擦除现有的)主向量的代价可能很高,但C++0x甚至用它的移动语义解决了这个问题。
最好在使用真实数据分析之后切换到更合适的容器,而不是试图使其最初变得极其动态。
发布于 2011-01-18 10:01:02
我的第一个问题是“为什么要使用嵌套向量?”如果您不需要对"2D数组“的维度进行锯齿处理,您可以使用单个向量和规范的2D索引到一个1D数组中(x + width * y)。
也就是说,由于向量在调整大小时会复制T个实例,等等,指向大对象的指针向量可能会更便宜,因为副本会更小(复制指针而不是“大对象”)。缺点是您必须自己管理大型对象的分配,但是像boost的shared_ptr这样的东西可以提供帮助(如果您有0x支持,也可以使用标准版本--虽然不是auto_ptr )。这里的“大对象”可以是任何东西,包括嵌套的向量或指向向量的指针,如果需要的话,就像你的原始示例一样。
编辑:您还可以使用reserve()预先分配向量中的空间,如果您可以保证要放入向量中的内容的数量,就可以防止大量复制。
发布于 2011-01-18 10:00:21
我认为在你的情况下不会有太大的性能差异,只是你想花时间创建对象的问题。
有时最好使用vector<vector<BigObject*>>
https://stackoverflow.com/questions/4719796
复制相似问题