如何预订多维向量?

时间:2012-05-07 18:02:21

标签: c++ vector

假设我有矢量载体

vector< vector<int> > bigTable;

bigTable.reserve(5);

澄清我对调整大小和保留的理解。

当你使用带向量的push_back时,每次使用它时都必须分配内存。 所以我的目标是设置一组内存空间,以便它最便宜。

因此,会为上述目标保留帮助吗?

1 个答案:

答案 0 :(得分:1)

每次拨打push_back时都不必分配内存。向量以给定容量开始,并且仅在原始容量耗尽时分配额外容量,通常是通过将先前容量加倍。如果您确定需要额外容量,则应该保留。您可以使用capacity成员检查您开始的容量。所以,是的,拨打reserve会有所帮助,但前提是你从一开始就知道你真的需要额外的容量。但是你也可以相信它可以在它需要的时候增加它的容量。

在我的特定平台上,当我初始化具有5个Foo元素的向量时,它具有容量5.当我添加一个新元素时,容量跳到10.这不是标准所规定的,原始容量可能远远超过5。

struct Foo {
  long long n;
};

int main() {

  std::vector<Foo> f(5);
  std::cout << f.capacity() << "\n";
  f.push_back(Foo());
  std::cout << f.capacity() << "\n";

}