如何预留多维向量?

Posted

技术标签:

【中文标题】如何预留多维向量?【英文标题】:How to reserve a multi-dimensional Vector? 【发布时间】:2012-05-07 18:02:21 【问题描述】:

假设我有向量的向量

vector< vector<int> > bigTable;

bigTable.reserve(5);

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

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

因此,保留对上述目标的帮助吗?

【问题讨论】:

【参考方案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";


【讨论】:

cplusplus.com/reference/stl/vector/capacity 有一个 capacity 的例子。 谢谢!这有助于澄清我的疑虑。任何想法,例如当前容量为 5。然后我调用 Reserve(2)。如果我这样做会很昂贵吗? @dupdupdup 向量的容量不太可能小于 2。也就是说,我怀疑储备会使其更小(我必须检查标准以确保这一点)

以上是关于如何预留多维向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 rank 1 数组是向量还是多维数组?

如何进行快速的多维矩阵向量乘法?

如何使用 C++ 中的指针通过指针传递多维向量?

如何重新调整多维向量的大小? C++ [重复]

我如何从多维向量中提取数据

将c多维数组转换为多维c++向量