如何预留多维向量?
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。也就是说,我怀疑储备会使其更小(我必须检查标准以确保这一点)以上是关于如何预留多维向量?的主要内容,如果未能解决你的问题,请参考以下文章