Добавление строки C

Если у меня есть строка, и я хочу добавить к ней голову и хвост строки (один в начале, а другой в конце), что было бы лучшим способом сделать это?Что-то вроде этого:

std::string tmpstr("some string here");
std::string head("head");
std::string tail("tail");
tmpstr = head + tmpstr + tail;

Есть ли лучший способ сделать это?

Спасибо заранее.

Простой вопрос:

Ответ на: "Добавление строки C"

Количество ответов:2

Если вы были обеспокоены эффективностью и хотели, чтобы избежать временных копий, сделанных оператором, то вы могли бы сделать:

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"