2012-08-10 196 views
3

保留记忆我读了关于计算器这个话题很多问题。但是,我无法在其中找到我的答案。因此,这个问题。矢量的矢量,C++

vector< vector<int> > temp 

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

temp.reserve(20); 

现在,我想保留记忆里每个向量。我可以这样做:

temp[i].reserve(500); 

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

我的问题:

  1. 我怎么能后保留的500内部矢量能力我清楚,并重新初始化外载体?

  2. 我使用OpenCV的findContours功能。该函数清除外部矢量并用新的内部矢量集填充它。这个函数是否会导致释放和重新分配内存?

+3

当你调用clear()时,所有的内部向量都被销毁。如果你想保留它们的容量,你必须为每个内部向量调用clear()。 – VoidStar 2012-08-10 01:40:16

+0

它甚至保证'std :: vector :: clear'保留保留的容量吗? – jamesdlin 2012-08-10 01:54:46

+0

是的,分配的内存没有被释放,只有元素被破坏,大小为0 – VoidStar 2012-08-10 02:04:23

回答

1

1)你不能在C++中。按定义清除外部矢量会破坏内部矢量,释放所有内存。

2)如果它清除外矢量并重新创建它,那么是它使解除分配随后的分配。

不幸的是,我不能让你的根本问题是什么,所以我不能提供关于可能的解决方案更多的帮助。

编辑:你总是可以有外是(可能智能)指针内矢量存储在/从池中检索的载体。然后当outer被清除时,只有指针本身被清除,并且汇集的内部向量仍然存在。

+0

感谢您的回答。我特别关注清除和重新创建外部向量的方法,并防止重新分配内部向量内存。但是,我不能在C++中实现这一点 – 2012-08-10 17:02:21