vector :: reserve有什么作用?

时间:2015-11-09 10:05:59

标签: c++ vector

vector::reserve尝试访问其数据后实际做了什么是错误的?

vector<int> v.reserve(10);
v[4] = 22;

如果这个分配的空间,它首先不应该是一个错误..它怎么能保留&#39;空间,如果它甚至没有分配它?如何通知操作系统它必须为矢量分配空间?

2 个答案:

答案 0 :(得分:6)

reserve 保留内存以增加向量,而无需更改size()。因此,在您的情况下,[4]仍然是无效索引。

虽然向量将根据需要增长到一个大小,但是在大块与小块的增长之间存在显着的权衡:大块会使昂贵的重新分配和副本不常见,但也浪费内存。

reserve(10)预留记忆,以便您可以push_back没有重新分配的10个元素。

何时使用:如果您要在多个步骤中向元素添加元素,并且事先知道元素的数量 - 或者即使您有一个好的猜测 - 使用reserve来准备向量以接受该元素许多元素,并减少必要的分配数量。

保留金额称为容量 - 可以使用.capacity()查询。

答案 1 :(得分:0)

vector :: reserve分配内存,但向量的大小不会改变(即使保留的大小&lt;向量的当前大小)。 使用vector :: resize来分配和更改大小。