あなたのメソッドは未定義の動作を呼び出します。文字列by-value、別名一時文字列をstream.str()
返します。1 つのテンポラリのイテレータともう 1 つのイテレータを使用して、無効な範囲を作成します。begin
end
ストリームをコンテナーに変換する 1 つの方法は、共通の反復子インターフェイスを使用することです。
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <iterator>
int main(){
std::stringstream src("....");
std::vector<char> dest;
// for a bit of efficiency
std::streampos beg = src.tellg();
src.seekg(0, std::ios_base::end);
std::streampos end = src.tellg();
src.seekg(0, std::ios_base::beg);
dest.reserve(end - beg);
dest.assign(std::istreambuf_iterator<char>(src), std::istreambuf_iterator<char>());
std::copy(dest.begin(), dest.end(), std::ostream_iterator<char>(std::cout));
}
Ideone での実例。
もう 1 つの方法は、返されたstd::string
オブジェクトをキャッシュすることです。
std::string const& s = stream.str();
data.reserve(s.size());
data.assign(s.begin(), s.end());