C++ 20 – std::formatas
C++20 yra su daugybe naujų funkcijų ir patobulinimų, įskaitant formatas () funkcija. Šiame straipsnyje mes išnagrinėsime, kaip std::format gali būti naudojamas formatuojant eilutes C++20.
C++20 – std::formatas
std::format yra nauja funkcija, įdiegta C++20, kuri suteikia galimybę formatuoti eilutes pakeičiant formato eilutėje esančius vietos rezervavimo ženklus pateiktų argumentų reikšmėmis. Vietos žymos vaizduojamos naudojant {} formato eilutėje.
Sintaksė:
std::string std::format(std::string_view format_string, Args... args);
Grąžinimo tipas: Funkcija grąžina std::string, kurioje yra suformatuota išvestis.
C++20 įvedamas naujas duomenų tipas, pavadintas std::string_view, kuris suteikia pagrindinės eilutės vaizdą. Jis veikia panašiai kaip žymeklis į eilutę, tačiau turi papildomų saugos ir patogumo funkcijų. Args… reiškia variadic parametrą, o tai reiškia, kad funkcija std::format gali priimti kintamą bet kokio tipo argumentų skaičių.
C++ 20 pavyzdžiai – std::format
1 pavyzdys:
Šis kodas parodo, kaip naudoti std::format formatuoti eilutę su kintamųjų vietos rezervavimo ženklais.
C++
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > using> namespace> std;> > int> main()> {> > // Declare variables> > int> num = 42;> > std::string name => 'John'> ;> > > // Use std::format to format a string with placeholders> > // for variables> > std::string formatted_str = std::format(> > 'My name is {} and my favorite number is {}'> , name,> > num);> > > // Print formatted string to console> > std::cout < < formatted_str < < std::endl;> > > return> 0;> }> |
Išvestis
My name is John and my favorite number is 42
Aukščiau pateiktame pavyzdyje turime formato eilutę, kurioje yra dvi rezervuotos vietos {}. Kintamųjų name ir num reikšmes perduodame funkcijai std::format, kuri pakeičia vietos žymeklius kintamųjų reikšmėmis. Gauta eilutė saugoma kintamajame formatted_str, kuris vėliau atspausdinamas konsolėje.
2 pavyzdys:
Šiame pavyzdyje pozicinius argumentus suprasime su std::format.
C++
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > // Declare an integer variable named num> > // and initialize it with the value 42> > int> num = 42;> > // Declare a string variable named name> > // and initialize it with the value 'John'> > std::string name => 'John'> ;> > > // Call the std::format function to create a formatted> > // string with placeholders for num and name The first> > // placeholder is represented by {0} and is replaced by> > // the value of num The second placeholder is> > // represented by {1} and is replaced by the value of> > // name> > std::string formatted_str = std::format(> > 'My name is {1} and my favorite number is {0}'> , num, name);> > > // Print the formatted string to the console> > std::cout < < formatted_str < < std::endl;> > return> 0;> }> |
Išvestis
My name is John and my favorite number is 42
Aukščiau pateiktame pavyzdyje pakeitėme std::format funkcijos argumentų tvarką ir prie vietos rezervavimo ženklų įtraukėme padėties indeksus. Pirmoji rezervuota vieta pakeičiama skaičiaus reikšme, o antroji rezervuota vieta pakeičiama pavadinimo reikšme.
3 pavyzdys:
Šiame pavyzdyje pamatysime, kaip std::format suteikia daug eilučių formatavimo parinkčių, kur galime naudoti {} vietos rezervavimo ženklus, kad nurodytume kiekvieno argumento formatavimo parinktis.
C++
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > > // Declare and initialize a double variable.> > double> num = 3.14159;> > > // Declare and initialize a string variable.> > std::string name => 'John'> ;> > > // Format a string with two placeholders, one for a> > // double and another for a string. The first> > // placeholder formats the double with two decimal> > // places and the second placeholder truncates the> > // string to two characters.> > std::string formatted_str = std::format(> > 'My name is {1:.2s} and pi is {0:.2f}'> , num, name);> > > // Print the formatted string to the console.> > std::cout < < formatted_str < < std::endl;> > > return> 0;> }> |
Išvestis
My name is Jo and pi is 3.14
Aukščiau pateiktame pavyzdyje prie vietos rezervavimo ženklų pridėjome formatavimo parinkčių. Pirmoji rezervuota vieta suformatuota kaip slankiojo kablelio skaičius su dviem skaitmenimis po kablelio, o antroji rezervuota vieta suformatuota kaip eilutė, kurios plotis ne didesnis kaip du simboliai.
Išvada
std::format palaiko daugybę formatavimo parinkčių, įskaitant galimybę formatuoti vartotojo nustatytus tipus. Tai efektyviau nei ankstesnės eilučių formatavimo parinktys C++, pvz., sprintf ir printf.