Как снова использовать ostringstream?

Это работает, когда я предоставляю числовые временные метки в качестве диапазона, несмотря на то, что мой timefmt выглядит как человеко-читаемая строка времени:

set xrange [1444122000:1433928600]
115
задан Diego Sevilla 8 March 2009 в 21:03
поделиться

3 ответа

Я использовал последовательность ясных и ул. в прошлом:

// clear, because eof or other bits may be still set. 
s.clear();
s.str("");

, Который сделал вещь для обоих вводов и выводов stringstreams. С другой стороны, можно вручную очистить, затем искать соответствующую последовательность на начинание:

s.clear();
s.seekp(0); // for outputs: seek put ptr to start
s.seekg(0); // for inputs: seek get ptr to start

, Который предотвратит некоторые перераспределения, сделанные str путем перезаписи того независимо от того, что находится в буфере вывода в настоящее время вместо этого. Результаты похожи на это:

std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b";
assert(s.str() == "bello");

, Если Вы хотите использовать строку для c-функций, можно использовать std::ends, помещая завершающийся пустой указатель как это:

std::ostringstream s;
s << "hello";
s.seekp(0);
s << "b" << std::ends;
assert(s.str().size() == 5 && std::strlen(s.str().data()) == 1);

std::ends остатки устаревшего std::strstream, который смог записать непосредственно в массив символов, который Вы выделили на стеке. Необходимо было вставить завершающийся пустой указатель вручную. Однако std::ends не удерживается от использования, я думаю, потому что это все еще полезно как в вышеупомянутых случаях.

151
ответ дан Johannes Schaub - litb 5 November 2019 в 09:11
поделиться

Вы не делаете. Используйте два по-другому именованных потока для ясности и позвольте оптимизирующему компилятору выяснить, что это может снова использовать старый.

0
ответ дан Nicolás 5 November 2019 в 09:11
поделиться

Кажется, что эти ostr.str("") вызов добивается цели.

5
ответ дан Diego Sevilla 5 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: