【发布时间】:2012-05-07 18:02:21
【问题描述】:
假设我有向量的向量
vector< vector<int> > bigTable;
bigTable.reserve(5);
澄清我对调整大小和保留的理解。
将 push_back 与向量一起使用时,每次使用时都必须分配内存。 所以我的目标是在一边设置一组内存空间,这样开销就最小了。
因此,保留对上述目标的帮助吗?
【问题讨论】:
假设我有向量的向量
vector< vector<int> > bigTable;
bigTable.reserve(5);
澄清我对调整大小和保留的理解。
将 push_back 与向量一起使用时,每次使用时都必须分配内存。 所以我的目标是在一边设置一组内存空间,这样开销就最小了。
因此,保留对上述目标的帮助吗?
【问题讨论】:
您不必每次调用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";
}
【讨论】:
capacity 的例子。