std :: vector :: reserve
无效储备(size_type n);
要求更改容量
请求向量容量至少足以包含n个元素。
如果n大于当前向量容量,则该函数使容器重新分配其存储,将其容量增加到n(或更大)。
在所有其他情况下,函数调用不会导致重新分配,向量容量也不会受到影响。
此功能对向量大小没有影响,并且不能更改其元素。
参量
ñ
最小容量的载体。
注意,所得向量容量可以等于或大于n。
成员类型size_type是无符号整数类型。
返回值
无
如果请求的大小大于最大大小(vector :: max_size),则将引发length_error异常。
如果发生重新分配,则使用容器的分配器分配存储空间,这可能在失败时引发异常(对于默认分配器,如果分配请求未成功,则会抛出bad_alloc)。
例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// vector::reserve
#include
#include
int main ()
{
std::vector::size_type sz;
std::vector foo;
sz = foo.capacity();
std::cout << “making foo grow:\n”;
for (int i=0; i<100; ++i) {
foo.push_back(i);
if (sz!=foo.capacity()) {
sz = foo.capacity();
std::cout << "capacity changed: " << sz << ‘\n’;
}
}
std::vector bar;
sz = bar.capacity();
bar.reserve(100); // this is the only difference with foo above
std::cout << “making bar grow:\n”;
for (int i=0; i<100; ++i) {
bar.push_back(i);
if (sz!=bar.capacity()) {
sz = bar.capacity();
std::cout << "capacity changed: " << sz << ‘\n’;
}
}
return 0;
}
编辑并运行
可能的输出:
使foo成长:
容量已更改:1
容量已更改:2
容量已更改:4
容量已更改:8
容量已更改:16
容量已更改:32
容量已更改:64
容量已更改:128
使酒吧成长:
容量已更改:100
复杂
如果发生重新分配,则向量大小最多为线性。
迭代器有效性
如果发生重新分配,则与容器相关的所有迭代器,指针和引用都将无效。
否则,它们都将继续引用在调用之前所引用的相同元素。
数据竞赛
如果发生重新分配,则会修改容器及其包含的所有元素。
否则,将访问容器,但不能访问包含的元素:并发访问或修改它们是安全的。
异常安全
如果没有发生重新分配,或者元素的类型具有非抛出移动构造函数或复制构造函数,则在发生异常的情况下容器中不会发生任何更改(强烈保证)。
否则,保证容器以有效状态结束(基本保证)。如果n大于max_size,
该函数将引发length_error。