StringBuffer no C++?

Olá!

Preciso implementar uma String em C++, e ao longo do tempo adicionar outros caracteres à mesma variável. Em java, consigo fazer isso utilizando o StringBuffer. Como posso fazer isso em C++?

Em Java Strings são imutáveis, o que faz com que multiplas concatenações sejam pesadas. Então entra a StringBuilder (ou StringBuffer) que é como a String, mas mutáveis.

Em C++ é o contrário, strings já são mutáveis e por isso é comum você fazer simplesmente isso sem comprometer a performance:

std::string str = "Hello";
str += ", World";

// OU

str.append("!!!");

Porém você não pode concatenar strings e números, por exemplo. O código abaixo não se comportaria como esperado ou geraria erro:

// Age de forma inesperada
str += 123;

// Erro de compilação
str.append(123);

E então surge o std::stringstream que trata uma simples string como se fosse uma stream e nos permite usá-la como se fosse, por exemplo, o std::cout.

// Não esqueça do header <sstream>
std::stringstream ss;

ss << "Hello ";
ss << 123;

std::string str = ss.str();

std::cout << str;

Não é legal? Eu vi isso aqui:

StackOverflow | C++ equivalent of StringBuffer/StringBuilder?.

Isto também pode ser útil:

cplusplus.com | stringstream reference.

3 curtidas