Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
 
void resize( size_type count );
(1) (constexpr seit C++20)
void resize( size_type count, CharT ch );
(2) (constexpr seit C++20)

Ändert die Größe des Strings auf count Zeichen.

Wenn die aktuelle Größe kleiner als count ist, werden zusätzliche Zeichen angehängt

1) Initialisiert angehängte Zeichen mit CharT() ('\0' wenn CharT char ist).
2) Initialisiert angehängte Zeichen mit ch.

Wenn die aktuelle Größe größer als count ist, wird der String auf seine ersten count Elemente reduziert.

Inhalt

[bearbeiten] Parameter

zählt - neue Größe des Strings
ch - Zeichen, mit dem die neuen Zeichen initialisiert werden sollen

[bearbeiten] Ausnahmen

std::length_error wenn count > max_size() true ist. Jegliche Ausnahmen, die vom entsprechenden Allocator geworfen werden.

Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).

[bearbeiten] Beispiel

#include <iomanip>
#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 << "Basic functionality:\n"
              << "Shorten:\n"
              << "1. Before: " << std::quoted(long_string) << '\n';
    long_string.resize(desired_length);
    std::cout << "2. After:  " << std::quoted(long_string) << '\n';
 
    std::cout << "Lengthen with a given value 'a':\n"
              << "3. Before: " << std::quoted(short_string) << '\n';
    short_string.resize(desired_length, 'a');
    std::cout << "4. After:  " << std::quoted(short_string) << '\n';
 
    std::cout << "Lengthen with char() == " << static_cast<int>(char()) << '\n'
              << "5. Before: " << std::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';
    }
}

Mögliche Ausgabe

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

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 847 C++98 Es gab keine Ausnahmesicherheitsgarantie starke Ausnahmesicherheitsgarantie hinzugefügt
LWG 2250 C++98 Das Verhalten war undefiniert, wenn
count > max_size() ist true
wirft in diesem Fall immer eine Ausnahme

[bearbeiten] Siehe auch

gibt die Anzahl der Zeichen zurück
(public member function) [edit]
reserviert Speicher
(public member function) [edit]
reduziert den Speicherverbrauch durch Freigabe von ungenutztem Speicher
(öffentliche Member-Funktion) [bearbeiten]