C ++ suma de cadenas
Pregunta
Una pregunta sencilla: Si tengo una cadena y quiero agregar a ella de cabeza y cola cuerdas (uno al principio y otro al final), ¿cuál sería la mejor manera de hacerlo? Algo como esto:
std::string tmpstr("some string here");
std::string head("head");
std::string tail("tail");
tmpstr = head + tmpstr + tail;
¿Hay alguna forma mejor de hacerlo?
Gracias de antemano.
Solución
Si estaban preocupados por la eficiencia y quería evitar las copias temporales realizadas por el operador +, entonces se podría hacer:
tmpstr.insert(0, head);
tmpstr.append(tail);
Y si usted fuera aún más preocupado por la eficiencia, es posible añadir
tmpstr.reserve(head.size() + tmpstr.size() + tail.size());
antes de hacer la inserción / anexar para asegurar que cualquier reasignación sólo ocurre una vez.
Sin embargo, el código original es simple y fácil de leer. A veces eso es "mejor" que una forma más eficiente, pero más difícil de leer solución.
Otros consejos
Un enfoque totalmente diferente:
#include <iostream>
#include <string>
#include <sstream>
int
main()
{
std::string tmpstr("some string here");
std::ostringstream out;
out << head << tmpstr << tail;
tmpstr = out.str(); // "headsome string heretail"
return 0;
}
Una ventaja de este enfoque es que se puede mezclar cualquier tipo para el que se sobrecarga el operador << y colocarlos en una cadena.
std::string tmpstr("some string here");
std::ostringstream out;
int head = tmpstr.length();
char sep = ',';
out << head << sep << tmpstr;
tmpstr = out.str(); // "16,some string here"
Se podría añadir la cola y luego cocatenate la cadena, como esto:
tmpstr.append(tail);
tmpstr = head + tmpstr;
Probablemente sería mejor simplemente crear una nueva cadena en ese punto.
std::string finalstr(head.length() + tmpstr.length() + 1);
finalstr = head + tmpstr;