Stringstream

stringstream.png

stringstreamのコツ

1文字だけなら"c"でなく'c'を使う

1文字(1byte)を代入するときに、無意識に次のように書いていませんか?

ss « "]";
この書き方だと、 operator« (ostream& out, const char* s )が使われ、文字列長さ取得のためにstrlen()が呼ばれます。(たった1文字の文字列定数なのに…)

1文字の場合、operator« (ostream& out, char c )関数を使いましょう。

ss « ']';
これで strlen()は呼ばれなくなります。

stringを代入するとき

sstream«string;

というやりかたをするとバグになるから

sstream«string.c_str();

ってやってたよね。
でも、stringは自分の長さをわかってるから、writeで書いたほうが効率的なのだ。

sstream.write(str.c_str(), str.length());

初期状態に戻すコード

void reset_stringstream(stringstream& ss)
{
  static const string empty_string;
 
  ss.str(empty_string);
  ss.clear()
  ss << dec;     // clear()でも元に戻らないので、毎回指定する。
}

文字の書く位置をずらす

long pos=URL.tellp();//現在の書き込みポインタをゲット
URL.seekp(pos-1);//ポインタをずらす

stringstreamのリファレンス
std::stringstream再考

サポートサイト Wikidot.com