我的地形引擎(使用DirectX)出现了问题。
我正在使用一个矢量来保存细节块的顶点。当块的细节增加时,向量也会增加。
但是,当块减少其细节时,向量的大小不会缩小。
那么,我的问题是:有没有办法缩小向量的大小?我确实试过这个:
vertexvector.reserve(16);发布于 2009-02-25 16:11:31
通常的技巧是用一个空向量进行交换:
vector<vertex>(vertexvector.begin(), vertexvector.end()).swap(vertexvector);发布于 2009-02-25 16:12:52
如果从向量中弹出元素,则不会释放内存(因为这会使容器元素中的迭代器失效)。您可以将向量复制到新向量,然后将其与原始向量交换。这将使它不会浪费空间。交换具有恒定的时间复杂度,因为交换不能使交换的向量的元素的迭代器无效:因此它只能交换内部缓冲区指针。
vector<vertex>(a).swap(a);它被称为“收缩到合适”的成语。顺便说一句,下一个C++版本包括std::vector的"shrink_to_fit()“成员函数。
发布于 2009-02-25 16:16:41
当向量大小减小时,保留的内存不会减少,因为这通常更有利于性能。缩小向量保留的内存量与将向量的大小增加到超过保留大小的开销一样大,因为这需要:
在某些情况下,分配器可以就地调整分配的大小,但这绝不是有保证的。
如果所需的大小发生了非常大的变化,并且您知道不希望该向量再次扩展(位置原则建议您会扩展,但当然也有例外),那么您可以使用litb建议的交换操作来显式地缩小向量:
vector<vertex>(a).swap(a);https://stackoverflow.com/questions/586634
复制相似问题