resetting a stringstream
resetting a stringstream
本文关键字:stringstream resetting 更新时间:2023-10-16
如何将字符串流的状态"重置"为我创建它时的状态?
int firstValue = 1;
int secondValue = 2;
std::wstringstream ss;
ss << "Hello: " << firstValue;
std::wstring firstText(ss.str());
//print the value of firstText here
//How do I "reset" the stringstream here?
//I would like it behave as if I had created
// stringstream ss2 and used it below.
ss << "Bye: " << secondValue;
std::wstring secondText(ss.str());
//print the value of secondText here
我通常是这样做的:
ss.str("");
ss.clear(); // Clear state flags.
我会做
std::wstringstream temp;
ss.swap(temp);
编辑:修复christianpartpart和Nemo报告的错误。谢谢。
PS:上面的代码在堆栈上创建了一个新的stringstream对象,并将ss
中的所有内容与新对象中的所有内容交换。
优势:
- 它保证
ss
现在将处于一个新的状态。 - 新对象是内联的,在堆栈上创建的,这样编译器可以很容易地优化代码。最后,它将像重置所有
ss
内部数据到初始状态。
:
与赋值操作符相比:当新对象在堆中有一个分配的缓冲区时,STL交换方法可以比赋值操作符更快。在这种情况下,赋值操作符必须为新对象分配缓冲区,然后可能需要为旧对象分配另一个缓冲区,然后将数据从新对象的缓冲区复制到旧对象的新缓冲区。实现快速交换是非常容易的,例如,它只是交换缓冲区的指针。
c++ 11。我看到一些移动赋值操作符的实现比交换慢,虽然可以修复,但可能STL开发人员不希望留下大量数据的移动对象
std::move()
不能保证被移动的对象被清空。return std::move(m_container);
不清除m_container。所以你必须输入汽车to_return (std::移动(m_container));m_container.clear ();返回to_return;
没有比
更好的了auto to_return;
m_container.swap(to_return);
return to_return;
因为后者保证它不会复制缓冲区。
所以我总是喜欢swap()
,只要它适合。
基于上面的答案,我们还需要重置任何格式。在所有这些操作中,当构造一个新的std::stringstream实例时,我们将缓冲区内容、流状态标志和所有格式化都重置为默认值。
void reset(std::stringstream& stream)
{
const static std::stringstream initial;
stream.str(std::string());
stream.clear();
stream.copyfmt(initial);
}
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用 "stringstream " 将字符串转换为整数
- std::stringstream 返回字符 *
- std::stringstream::flush() 应该做什么吗?
- 静态 std::stringstream 的叮当整警告
- Stringstream编译错误仅发生在linux环境中
- 为什么我在蓝牙连接()上收到"java.io.IOException:读取失败,套接字可能关闭或超时,读取re
- "stringstream"复制构造它的字符串吗?
- 为什么"std::stringstream::stringstream(std::string&&)"不存在?
- 为什么 {fmt} 比 std::stringstream 慢?
- 如何"Re-Polish"相同风格的QApplication?
- C++命令末尾的 std::stringstream 空格
- 如何强制调用类的全局实例的析构函数和构造函数(以便"re-init"类实例)
- 返回 std::stringstream - 编译失败
- C++ std::stringstream 运算符<< vs (构造函数)
- 流从STD :: Stringstream带有空间的流
- 使用C STL StringStream记录具有实时性能要求
- iStream 未完全恢复已放入 Stringstream 的内容
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re