public member function
<string>

std::string::reserve

void reserve (size_t n = 0);
请求更改容量
请求将字符串容量调整为计划的大小更改,最多为n个字符的长度

如果n大于当前的字符串容量,该函数会导致容器将其容量增加到n个字符(或更多)。

在所有其他情况下,它被视为缩小字符串容量的非约束性请求:容器实现可以自由地进行其他优化,并使字符串容量大于n

此函数对字符串长度没有影响,也不会更改其内容。

参数

n
字符串的计划长度
请注意,生成的字符串容量可能等于或大于n
size_t 是一个无符号整数类型(与成员类型 string::size_type 相同)。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// string::reserve
#include <iostream>
#include <fstream>
#include <string>

int main ()
{
  std::string str;

  std::ifstream file ("test.txt",std::ios::in|std::ios::ate);
  if (file) {
    std::ifstream::streampos filesize = file.tellg();
    str.reserve(filesize);

    file.seekg(0);
    while (!file.eof())
    {
      str += file.get();
    }
    std::cout << str;
  }
  return 0;
}

此示例在字符串对象中保留足够的容量来存储整个文件,然后逐个字符地读取它。 通过为字符串保留至少整个文件大小的容量,我们尝试避免对象str每次插入新字符都会使其长度超过其容量时可能遭受的所有自动重新分配。

复杂度

未指定,但通常是恒定的。

迭代器有效性

与此对象相关的任何迭代器、指针和引用都可能失效。

数据竞争

对象被修改。

异常安全

强保证: 如果抛出异常,string 中不会有任何更改。

如果n大于max_size,则会引发length_error异常。
如果函数需要分配存储空间但失败,则会抛出 bad_alloc 异常。

另见