3

可以说我有向量的向量

vector< vector<int> > bigTable;

bigTable.reserve(5);

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

将 push_back 与向量一起使用时,每次使用时都必须分配内存。所以我的目标是在一边设置一组内存空间,这样它就会最便宜。

因此,储备是否有助于实现上述目标?

4

1 回答 1

1

您不必每次调用时都分配内存push_back。向量以给定的容量开始,并且仅在原始容量用完时才分配额外的容量,通常是通过将先前的容量增加一倍。仅当您确定需要额外容量时才应预订。您可以检查使用容量成员开始时的容量。所以,是的,致电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";

}
于 2012-05-07T18:06:03.590 回答