Это работает, когда я предоставляю числовые временные метки в качестве диапазона, несмотря на то, что мой timefmt
выглядит как человеко-читаемая строка времени:
set xrange [1444122000:1433928600]
Я использовал последовательность ясных и ул. в прошлом:
// 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
не удерживается от использования, я думаю, потому что это все еще полезно как в вышеупомянутых случаях.
Вы не делаете. Используйте два по-другому именованных потока для ясности и позвольте оптимизирующему компилятору выяснить, что это может снова использовать старый.
Кажется, что эти ostr.str("")
вызов добивается цели.