std::basic_string<CharT,Traits,Allocator>::resize

来自cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
迭代器
容量
操作
basic_string::resize
搜索
常量
推导指引 (C++17)
非成员函数
I/O
比较
(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20 前)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)    
(C++11)(C++11)(C++11)
(C++11)
(C++11)
辅助类
 
(1)
void resize( size_type count );
(C++20 前)
constexpr void resize( size_type count );
(C++20 起)
(2)
void resize( size_type count, CharT ch );
(C++20 前)
constexpr void resize( size_type count, CharT ch );
(C++20 起)

重设字符串大小,使其包含 count 个字符。

如果当前大小小于 count,那么后附额外的字符:

1) 将后附的字符初始化为 CharT()(在 CharTchar 时就是 '\0')。
2) 将后附的字符初始化为 ch

如果当前大小大于 count,那么字符串会缩减到首 count 个元素。

参数

count - 字符串的新大小
ch - 用以初始化新字符的字符

返回值

(无)

异常

count > max_size() 时抛出 std::length_error。也会抛出对应 Allocator 所抛的任何异常。

如果因为任何原因抛出了异常,那么此函数无效果(强异常安全保证)。

示例

#include <iostream>
#include <stdexcept>
 
int main()
{
    const unsigned desired_length{8};
    std::string long_string("Where is the end?");
    std::string short_string("H");
 
    std::cout << "基础功能:\n"
              << "缩短:\n"
              << "1. resize 前:" << quoted(long_string) << '\n';
    long_string.resize(desired_length);
    std::cout << "2. resize 后:" << quoted(long_string) << '\n';
 
    std::cout << "以给定字符 'a' 加长:\n"
              << "3. resize 前:" << quoted(short_string) << '\n';
    short_string.resize(desired_length, 'a');
    std::cout << "4. resize 后:" << quoted(short_string) << '\n';
 
    std::cout << "以 char() == " << static_cast<int>(char()) << " 加长:\n"
              << "5. resize 前:" << quoted(short_string) << '\n';
    short_string.resize(desired_length + 3);
    std::cout << "6. resize 后:\"";
    for (char c : short_string)
        std::cout << (c == char() ? '@' : c);
    std::cout << "\"\n\n";
 
    std::cout << "错误:\n";
    std::string s;
 
    try
    {
        // 大小 OK,没有 length_error(可能会抛出 bad_alloc)
        s.resize(s.max_size() - 1, 'x');
    }
    catch (const std::bad_alloc& ex)
    {
        std::cout << "1. 异常:" << ex.what() << '\n';
    }
 
    try
    {
        // 大小 OK,没有 length_error(可能会抛出 bad_alloc)
        s.resize(s.max_size(), 'x');
    }
    catch (const std::bad_alloc& ex)
    {
        std::cout << "3. 异常:" << ex.what() << '\n';
    }
 
    try
    {
        // 大小错误,抛出 length_error
        s.resize(s.max_size() + 1, 'x');
    }
    catch (const std::length_error& ex)
    {
        std::cout << "3. length_error:" << ex.what() << '\n';
    }
}

可能的输出:

基础功能:
缩短:
1. resize 前:"Where is the end?"
2. resize 后:"Where is"
以给定字符 'a' 加长:
3. resize 前:"H"
4. resize 后:"Haaaaaaa"
以 char() == 0 加长:
5. resize 前:"Haaaaaaa"
6. resize 后:"Haaaaaaa@@@"
 
错误:
1. 异常:std::bad_alloc
2. 异常:std::bad_alloc
3. length_error:basic_string::_M_replace_aux

复杂度

与字符串大小成线性。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 847 C++98 没有异常安全保证 添加强异常安全保证

参阅

返回字符数
(公开成员函数)