可以说我有向量的向量
vector< vector<int> > bigTable;
bigTable.reserve(5);
澄清我对调整大小和保留的理解。
将 push_back 与向量一起使用时,每次使用时都必须分配内存。所以我的目标是在一边设置一组内存空间,这样它就会最便宜。
因此,储备是否有助于实现上述目标?
您不必每次调用时都分配内存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";
}