std::string tmpstr("some string here");
std::string head("head");
std::string tail("tail");
tmpstr = head + tmpstr + tail;
Есть ли лучший способ сделать это?
Спасибо заранее.
Простой вопрос:
std::string tmpstr("some string here");
std::string head("head");
std::string tail("tail");
tmpstr = head + tmpstr + tail;
Есть ли лучший способ сделать это?
Спасибо заранее.
Простой вопрос:
Если вы были обеспокоены эффективностью и хотели, чтобы избежать временных копий, сделанных оператором, то вы могли бы сделать:
tmpstr.insert(0, head);
tmpstr.append(tail);
И если вы были еще более обеспокоены эффективностью, вы можете добавить
tmpstr.reserve(head.size() + tmpstr.size() + tail.size());
прежде чем делать вставки / приложения для обеспечения любого перераспределения происходит только один раз.
Однако, ваш оригинальный код прост и прост в использовании. Иногда это "лучше", чем более эффективное, но труднее читать решение.
Совершенно другой подход:
#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;
}
Преимущество этого подхода заключается в том, что вы можете смешивать любой тип, для которого operator'lt; перегружены и поместить их в строку.
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"