public member function
<string>

std::basic_string::reserve

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

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

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

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

参数

n
basic_string的计划长度
请注意,生成的字符串容量可以等于或大于n
成员类型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;
}

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

复杂度

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

迭代器有效性

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

数据竞争

对象被修改。

异常安全

强保证: 如果抛出异常,则 basic_string 中没有任何更改。

如果n大于max_size,则会抛出length_error异常。
如果该类型使用默认分配器,如果函数需要分配存储空间但失败,则会抛出bad_alloc异常。

另见