【问题标题】:reserving memory for vector of vector, c++为向量的向量保留内存,C++
【发布时间】: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)。

我的问题:

  1. 清除并重新初始化外向量后,如何保持内向量容量为 500?

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

【问题讨论】:

  • 当你调用 clear() 时,所有的内部向量都会被销毁。如果要保留它们的容量,则必须为每个内部向量调用 clear()。
  • 是否甚至可以保证std::vector::clear 保留保留的容量?
  • 是的,分配的内存没有被释放,只是元素被销毁,大小变为0。
  • @jamesdlin 不,这根本不能保证。我曾经使用过一个实现,它释放了clear 上的内存(尽管我不记得它是哪个编译器)。
  • @VoidStar:错了,clear() 可能会也可能不会释放内存。实际上,该细节是特定于实现的。在任何 C++ 标准中都不是强制性的。

标签: c++ opencv vector


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回答。我特别在寻找一种方法来清除和重新创建外部向量并防止释放,然后重新分配内部向量内存。但是,我认为这在 C++ 中是不可能的
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
相关资源
最近更新 更多