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 起)

重设 string 大小以含 count 个字符。

若当前大小小于 count ,则后附额外的字符。

若当前大小大于 count ,则缩减 string 到为其首 count 个元素。

第一版本初始化新字符为 CharT() ,第二版本初始化新字符为 ch

参数

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

返回值

(无)

异常

count > max_size() 则为 std::length_error 。对应 Allocator 所抛的任何异常。

若因任何原因抛出异常,则此函数无效果(强异常保证)。 (C++11 起)

示例

#include <iostream>
#include <stdexcept>
 
int main()
{
    std::cout << "Basic functionality:\n";
    const unsigned  desired_length(8);
    std::string     long_string( "Where is the end?" );
    std::string     short_string( "Ha" );
 
    // 缩短
    std::cout << "Before: \"" << long_string << "\"\n";
    long_string.resize( desired_length );
    std::cout << "After: \"" << long_string <<  "\"\n";
 
    // 加长
    std::cout << "Before: \"" << short_string <<  "\"\n";
    short_string.resize( desired_length, 'a' );
    std::cout << "After: \"" << short_string <<  "\"\n";
 
    std::cout  << "\nErrors:\n";
    {
        std::string s;    
 
        try {
            // 大小 OK ,无 length_error
            // (可能抛 bad_alloc )
            s.resize(s.max_size() - 1, 'x');
        } catch (const std::bad_alloc&) {
            std::cout << "1. bad alloc\n";
        }
 
        try {
            // 大小 OK ,无 length_error
            // (可能抛 bad_alloc )
            s.resize(s.max_size(), 'x');
        } catch (const std::bad_alloc& exc) {
            std::cout << "2. bad alloc\n";
        }
 
        try {
            // 大小错误,抛出 length_error
            s.resize(s.max_size() + 1, 'x');
        } catch (const std::length_error&) {
            std::cout << "3. length error\n";
        }
     }
}

可能的输出:

Basic functionality:
Before: "Where is the end?"
After: "Where is"
Before: "Ha"
After: "Haaaaaaa"
 
Errors:
1. bad alloc
2. bad alloc
3. length error

复杂度

与 string 大小成线性。

参阅

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