Presently, I set the value of a std::vector
from an std::ostringstream
as follows:
void
foo(std::vector &am
As pointed out in comments, your code is incorrect due to the two calls to str()
. In order to improve efficiency you can avoid creating a temporary vector
, like this:
void foo(std::vector &data, std::stringstream &stream) {
const std::string& str = stream.str();
data.assign( str.begin(), str.end() );
}
You can also avoid the std::string
by using std::istreambuf_iterator
s:
void foo(std::vector &data, std::stringstream &stream) {
data.assign(
std::istreambuf_iterator( stream ), std::istreambuf_iterator()
);
}
but given that those are input iterators, the vector
has no chance to know how much data will be assigned and could perform a bit worse, as it cannot reserve
enough space to avoid reallocations.