Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/string/basic string/resize"

From cppreference.com
< cpp‎ | string‎ | basic string
m (Clarify what is a `CharT()`. See: https://stackoverflow.com/a/72367153/4561887)
(CharT(), not CharT(0) But sure, showing the value it resolves to for the most common type is good)
Line 20: Line 20:
 
If the current size is less than {{tt|count}}, additional characters are appended:
 
If the current size is less than {{tt|count}}, additional characters are appended:
  
@1@ Initializes appended characters to {{c|CharT(0)}} (null terminator, binary zero chars of type {{tt|CharT}}).
+
@1@ Initializes appended characters to {{c|CharT()}} ({{tt|CharT}}).
 
@2@ Initializes appended characters to {{tt|ch}}.
 
@2@ Initializes appended characters to {{tt|ch}}.
  

Revision as of 12:42, 24 May 2022

 
 
 
std::basic_string
 
(1)
void resize( size_type count );
(until C++20)
constexpr void resize( size_type count );
(since C++20)
(2)
void resize( size_type count, CharT ch );
(until C++20)
constexpr void resize( size_type count, CharT ch );
(since C++20)

Resizes the string to contain count characters.

If the current size is less than count, additional characters are appended:

1) Initializes appended characters to CharT() ('\0' if CharT is char).
2) Initializes appended characters to ch.

If the current size is greater than count, the string is reduced to its first count elements.

Contents

Parameters

count - new size of the string
ch - character to initialize the new characters with

Return value

(none)

Exceptions

std::length_error if count > max_size(). Any exceptions thrown by corresponding Allocator.

If an exception is thrown for any reason, this function has no effect (strong exception guarantee).(since C++11)

Example

#include <iostream>
#include <iomanip>
#include <stdexcept>
 
int main()
{
    const unsigned  desired_length{ 8 };
    std::string     long_string( "Where is the end?" );
    std::string     short_string( "H" );
 
 
    std::cout << "Basic functionality:\n"
              << "Shorten:\n"
              << "1. Before: " << quoted( long_string ) << '\n';
    long_string.resize( desired_length );
    std::cout << "2. After:  " << quoted( long_string ) << '\n';
 
 
    std::cout << "Lengthen with a given value 'a':\n"
              << "3. Before: " << quoted( short_string ) << '\n';
    short_string.resize( desired_length, 'a' );
    std::cout << "4. After:  " << quoted( short_string ) << '\n';
 
 
    std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n'
              << "5. Before: " << quoted( short_string ) << '\n';
    short_string.resize( desired_length + 3 );
    std::cout << "6. After:  \"";
    for (char c : short_string) {
        std::cout << (c == char() ? '@' : c);
    }
    std::cout << "\"\n\n";
 
 
    std::cout << "Errors:\n";
    {
        std::string s;
 
        try {
            // size is OK, no length_error
            // (may throw bad_alloc)
            s.resize(s.max_size() - 1, 'x');
        } catch (const std::bad_alloc& ex) {
            std::cout << "1. Exception: " << ex.what() << '\n';
        }
 
        try {
            // size is OK, no length_error
            // (may throw bad_alloc)
            s.resize(s.max_size(), 'x');
        } catch (const std::bad_alloc& ex) {
            std::cout << "2. Exception: " << ex.what() << '\n';
        }
 
        try {
            // size is BAD, throw length_error
            s.resize(s.max_size() + 1, 'x');
        } catch (const std::length_error& ex) {
            std::cout << "3. Length error: " << ex.what() << '\n';
        }
    }
}

Possible output:

Basic functionality:
Shorten:
1. Before: "Where is the end?"
2. After:  "Where is"
Lengthen with a given value 'a':
3. Before: "H"
4. After:  "Haaaaaaa"
Lengthen with char() == 0
5. Before: "Haaaaaaa"
6. After:  "Haaaaaaa@@@"
 
Errors:
1. Exception: std::bad_alloc
2. Exception: std::bad_alloc
3. Length error: basic_string::_M_replace_aux

See also

returns the number of characters
(public member function) [edit]