假设我有矢量载体
vector< vector<int> > bigTable;
bigTable.reserve(5);
澄清我对调整大小和保留的理解。
当你使用带向量的push_back时,每次使用它时都必须分配内存。 所以我的目标是设置一组内存空间,以便它最便宜。
因此,会为上述目标保留帮助吗?
答案 0 :(得分: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";
}