Namespaces
Variants

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

From cppreference.net
std::basic_string
void resize ( size_type count ) ;
(1) (constexpr depuis C++20)
void resize ( size_type count, CharT ch ) ;
(2) (constexpr depuis C++20)

Redimensionne la chaîne pour contenir count caractères.

Si la taille actuelle est inférieure à count , des caractères supplémentaires sont ajoutés :

1) Initialise les caractères ajoutés à CharT ( ) ( ' \0 ' si CharT est char ).
2) Initialise les caractères ajoutés à ch .

Si la taille actuelle est supérieure à count , la chaîne est réduite à ses premiers count éléments.

Table des matières

Paramètres

count - nouvelle taille de la chaîne
ch - caractère pour initialiser les nouveaux caractères

Exceptions

std::length_error si count > max_size ( ) est true . Toutes les exceptions levées par l'allocateur correspondant Allocator .

Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).

Exemple

#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 << "Fonctionnalité de base :\n"
              << "Raccourcir :\n"
              << "1. Avant : " << std::quoted(long_string) << '\n';
    long_string.resize(desired_length);
    std::cout << "2. Après :  " << std::quoted(long_string) << '\n';
    std::cout << "Allonger avec une valeur donnée 'a' :\n"
              << "3. Avant : " << std::quoted(short_string) << '\n';
    short_string.resize(desired_length, 'a');
    std::cout << "4. Après :  " << std::quoted(short_string) << '\n';
    std::cout << "Allonger avec char() == " << static_cast<int>(char()) << '\n'
              << "5. Avant : " << std::quoted(short_string) << '\n';
    short_string.resize(desired_length + 3);
    std::cout << "6. Après :  \"";
    for (char c : short_string)
        std::cout << (c == char() ? '@' : c);
    std::cout << "\"\n\n";
    std::cout << "Erreurs :\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. Erreur de longueur : " << ex.what() << '\n';
    }
}

Sortie possible :

Fonctionnalité de base :
Raccourcir :
1. Avant : "Where is the end?"
2. Après :  "Where is"
Allonger avec une valeur donnée 'a' :
3. Avant : "H"
4. Après :  "Haaaaaaa"
Allonger avec char() == 0
5. Avant : "Haaaaaaa"
6. Après :  "Haaaaaaa@@@"
Erreurs :
1. Exception : std::bad_alloc
2. Exception : std::bad_alloc
3. Erreur de longueur : basic_string::_M_replace_aux

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 847 C++98 aucune garantie de sécurité des exceptions n'était présente garantie de sécurité forte des exceptions ajoutée
LWG 2250 C++98 le comportement était indéfini si
count > max_size ( ) est true
lève toujours une exception dans ce cas

Voir aussi

renvoie le nombre de caractères
(fonction membre publique)
réserve du stockage
(fonction membre publique)
réduit l'utilisation de la mémoire en libérant la mémoire inutilisée
(fonction membre publique)