std :: vector :: reserve

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值