跳到主要内容

std::string reserve() 方法

// Non const version only
constexpr void reserve( size_type new_cap );

// Non const version only
void reserve();
  • (1) 通知 std::basic_string 对象计划的尺寸变更,以便它可以适当地管理存储分配。

    • 如果 new_cap 大于当前的 capacity(),则分配新的存储空间,并且 capacity() 将等于或大于 new_cap
      • 如果 new_cap 小于或等于当前的 capacity(),则没有效果。
  • (2) 不带参数调用 reserve 是一个非约束性收缩以适应请求。在此调用之后,capacity() 具有未指定的值,该值大于或等于 size()。

失效

如果发生容量变化,所有迭代器引用,包括尾后迭代器,都将失效。

参数

  • new_cap - 字符串的新容量,以元素数量表示

类型要求

  • T (容器的元素类型)必须满足 MoveInsertable 的要求。

返回值

(无)

复杂度

最多与容器的 size() 成线性关系 - O(size())

异常

示例

Main.cpp
#include <cassert>
#include <iostream>
#include <string>

int main()
{
std::string s;
const std::string::size_type new_capacity{ 100u };
std::cout << "Before: " << s.capacity() << "\n";

s.reserve(new_capacity);
std::cout << "After: " << s.capacity() << "\n";
assert(new_capacity <= s.capacity());

// observing the capacity growth factor
auto cap{ s.capacity() };
for (int check{}; check != 4; ++check) {
while(cap == s.capacity())
s += '$';
cap = s.capacity();
std::cout << "New capacity: " << cap << '\n';
}

// s.reserve(); //< deprecated in C++20, use:
s.shrink_to_fit();
std::cout << "After: " << s.capacity() << "\n";
}
可能输出
Before: 15
After: 100
New capacity: 200
New capacity: 400
New capacity: 800
New capacity: 1600
After: 801
本文源自此 CppReference 页面。它可能因改进或编辑偏好而有所更改。单击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。

std::string reserve() 方法

// Non const version only
constexpr void reserve( size_type new_cap );

// Non const version only
void reserve();
  • (1) 通知 std::basic_string 对象计划的尺寸变更,以便它可以适当地管理存储分配。

    • 如果 new_cap 大于当前的 capacity(),则分配新的存储空间,并且 capacity() 将等于或大于 new_cap
      • 如果 new_cap 小于或等于当前的 capacity(),则没有效果。
  • (2) 不带参数调用 reserve 是一个非约束性收缩以适应请求。在此调用之后,capacity() 具有未指定的值,该值大于或等于 size()。

失效

如果发生容量变化,所有迭代器引用,包括尾后迭代器,都将失效。

参数

  • new_cap - 字符串的新容量,以元素数量表示

类型要求

  • T (容器的元素类型)必须满足 MoveInsertable 的要求。

返回值

(无)

复杂度

最多与容器的 size() 成线性关系 - O(size())

异常

示例

Main.cpp
#include <cassert>
#include <iostream>
#include <string>

int main()
{
std::string s;
const std::string::size_type new_capacity{ 100u };
std::cout << "Before: " << s.capacity() << "\n";

s.reserve(new_capacity);
std::cout << "After: " << s.capacity() << "\n";
assert(new_capacity <= s.capacity());

// observing the capacity growth factor
auto cap{ s.capacity() };
for (int check{}; check != 4; ++check) {
while(cap == s.capacity())
s += '$';
cap = s.capacity();
std::cout << "New capacity: " << cap << '\n';
}

// s.reserve(); //< deprecated in C++20, use:
s.shrink_to_fit();
std::cout << "After: " << s.capacity() << "\n";
}
可能输出
Before: 15
After: 100
New capacity: 200
New capacity: 400
New capacity: 800
New capacity: 1600
After: 801
本文源自此 CppReference 页面。它可能因改进或编辑偏好而有所更改。单击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。