Ce face std::format_to
std::format_to formatează la fel ca std::format, dar nu creează un șir nou: scrie caracterele prin iteratorul primit. Cel mai des folosit este std::back_inserter(sir), care adaugă la finalul unui std::string existent.
Poate scrie și într-un tablou char, dar atunci tu răspunzi de mărimea lui: funcția nu verifică dacă textul încape. Returnează iteratorul de după ultimul caracter scris, util pentru a pune terminatorul '\0'.
Parametri
| Parametru | Descriere |
|---|---|
iesire |
Iterator de ieșire: std::back_inserter(sir), un pointer char* etc. |
sablon |
Textul cu marcaje {}, cunoscut la compilare. |
valori... |
Valorile care înlocuiesc marcajele. |
Ce returnează
Iteratorul de după ultimul caracter scris.
Exemple
Exemplul 1: Construirea unui raport într-un singur șir
#include <format>
#include <iterator>
#include <print>
#include <string>
int main() {
struct Produs { std::string nume; int bucati; double pret; };
Produs cos[] = {{"Caiet", 3, 4.5}, {"Pix", 10, 2.2}, {"Rucsac", 1, 129.0}};
std::string raport;
for (const auto& p : cos) {
std::format_to(std::back_inserter(raport), "{:<8}{:>3} x {:>7.2f}\n", p.nume, p.bucati, p.pret);
}
std::print("{}", raport);
}
Rezultat
Caiet 3 x 4.50
Pix 10 x 2.20
Rucsac 1 x 129.00
Exemplul 2: Scriere într-un tablou de char
Iteratorul returnat arată unde s-a terminat textul; acolo punem '\0'.
#include <cstdio>
#include <format>
int main() {
char buffer[64];
char* sfarsit = std::format_to(buffer, "Comanda {:05} - {} lei", 42, 99);
*sfarsit = '\0';
std::puts(buffer);
std::printf("Caractere scrise: %td\n", sfarsit - buffer);
}
Rezultat
Comanda 00042 - 99 lei
Caractere scrise: 22
Greșeli frecvente
- Scrii într-un tablou
charprea mic:format_tonu se oprește la capătul lui și strică memoria vecină (comportament nedefinit). Foloseștestd::format_to_nsau unstd::stringcuback_inserter. - Uiți
'\0'la final când scrii într-unchar[]și apoi îl folosești ca șir C.
Comenzi înrudite
std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).std::vformat: Formatează după un șablon cunoscut abia la rulare, de exemplu ales după limbă.std::string::append: Adaugă text la sfârșitul șirului, la fel ca +=, cu variante pentru bucăți și caractere repetate.