vector::reserve
尝试访问其数据后实际做了什么是错误的?
vector<int> v.reserve(10);
v[4] = 22;
如果这个分配的空间,它首先不应该是一个错误..它怎么能保留&#39;空间,如果它甚至没有分配它?如何通知操作系统它必须为矢量分配空间?
答案 0 :(得分:6)
reserve
保留内存以增加向量,而无需更改size()
。因此,在您的情况下,[4]
仍然是无效索引。
虽然向量将根据需要增长到一个大小,但是在大块与小块的增长之间存在显着的权衡:大块会使昂贵的重新分配和副本不常见,但也浪费内存。
reserve(10)
预留记忆,以便您可以push_back
没有重新分配的10个元素。
何时使用:如果您要在多个步骤中向元素添加元素,并且事先知道元素的数量 - 或者即使您有一个好的猜测 - 使用reserve
来准备向量以接受该元素许多元素,并减少必要的分配数量。
保留金额称为容量 - 可以使用.capacity()
查询。
答案 1 :(得分:0)
vector :: reserve分配内存,但向量的大小不会改变(即使保留的大小&lt;向量的当前大小)。 使用vector :: resize来分配和更改大小。