3

我在stackoverflow上阅读了很多关于这个主题的问题。但是,我在其中任何一个中都找不到我的答案。因此,这个问题。

我有

vector< vector< int > > temp

我可以为外部向量保留内存:

temp.reserve(20);

现在,我想为每个内部向量保留内存。我可以这样做:

temp[i].reserve(500);

但是,如果我使用 temp.clear(); 那么 temp 的容量保留为 20。但是,现在如果我用 20 个内部向量初始化 temp 向量,这些内部向量的容量将重置为 0(根据 VS2010 Intellisense)。

我的问题:

  1. 即使在清除并重新初始化外部向量后,如何保留 500 的内部向量容量?

  2. 我正在使用 OpenCV findContours 函数。此函数清除外部向量并用一组新的内部向量填充它。这个函数会导致内存的释放和重新分配吗?

4

1 回答 1

1

1)你不能在 C++ 中。根据定义清除外部向量会破坏内部向量,释放它们的所有内存。

2)如果它正在清除外部向量并重新创建它,那么是的,它会导致释放,然后是分配。

不幸的是,我无法弄清楚您的根本问题是什么,因此我无法就可能的解决方案提供更多帮助。

编辑:您总是可以让外部成为一个(可能是智能)指针的向量,这些指针指向存储在池中/从池中检索的内部向量。然后当外部被清除时,只有指针本身被清除并且池化的内部向量仍然存在。

于 2012-08-10T02:22:20.537 回答