【发布时间】:2012-08-10 01:18:53
【问题描述】:
我在 stackoverflow 上阅读了很多关于这个主题的问题。但是,我在其中任何一个中都找不到我的答案。因此,这个问题。
我有
vector< vector< int > > temp
我可以为外向量保留内存:
temp.reserve(20);
现在,我想为每个内部向量保留内存。我可以这样做:
temp[i].reserve(500);
但是,如果我使用 temp.clear();那么 temp 的容量保持为 20。 但是,现在如果我用 20 个内部向量初始化临时向量,这些内部向量的容量将重置为 0(根据 VS2010 Intellisense)。
我的问题:
清除并重新初始化外向量后,如何保持内向量容量为 500?
我正在使用 OpenCV findContours 函数。此函数清除外部向量并用一组新的内部向量填充它。这个函数会导致内存的释放和重新分配吗?
【问题讨论】:
-
当你调用 clear() 时,所有的内部向量都会被销毁。如果要保留它们的容量,则必须为每个内部向量调用 clear()。
-
是否甚至可以保证
std::vector::clear保留保留的容量? -
是的,分配的内存没有被释放,只是元素被销毁,大小变为0。
-
@jamesdlin 不,这根本不能保证。我曾经使用过一个实现,它释放了
clear上的内存(尽管我不记得它是哪个编译器)。 -
@VoidStar:错了,
clear()可能会也可能不会释放内存。实际上,该细节是特定于实现的。在任何 C++ 标准中都不是强制性的。