如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?相关的知识,希望对你有一定的参考价值。
1)
我想在运算符<<
中重载,这样我就可以打印模板矩阵T.
我想使用模板类的运算符<<
并且要对齐它我必须知道写入的字符数,并在最后添加空格直到一定数量的字符。
但是,我不知道我怎么能(如果可以的话)获得写入的字符串或写入的字符数...
2) 我需要表演
cout << myobject
好几次。但是,这个运算符<<花了很多时间,所以我只想一次并存储它的结果。我该怎么做才能避免一遍又一遍地使用相同的方法?
有任何想法吗?
第一个问题的解决方案。
- 使用
std::ostringstream
写入矩阵的元素。 - 从
std::string
获取std::ostringstream
。 - 编写一个函数,在字符串的左侧或右侧添加填充,以便生成的字符串具有给定的长度。
- 使用填充字符串在
std::cout
或std::ofstream
中创建最终输出。
一般来说,你不能。 std::ostream
提供的最相似的东西是tellp
方法,它为您提供当前文件中的位置。不幸的是,当你关心与上一个换行相关的位置时,这对你没有帮助;此外,在许多常见情况下,甚至没有实现此方法(标准输出“文件”中的位置,或插槽中的位置?)。
至于提取所写的内容,不再是。底层的streambuf
不必保留这些数据 - 事实上,它甚至可以在写入时立即刷新到每个单个字符的底层设备(这几乎与无缓冲输出一样)。
这样的事情会引起什么兴趣吗?
│1 2 300 │
│1 463 6 │
│165 286 34457 │
│1.000000 0.000000 0.000000 │
│0.000000 1.000000 0.000000 │
│0.000000 0.000000 1.000000 │
│Hello World! This │
│is a test │
│to create spaces │
代码很粗糙,您可能需要调整它以补偿32位和64位。
我认为你也可以修改它,以便你可以使用tabbing,默认情况下占用8个空格。
在线代码示例:https://rextester.com/IFXUFZ49322
以上是关于如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?的主要内容,如果未能解决你的问题,请参考以下文章
命名空间中的ostream operator <<隐藏其他ostream :: operator [duplicate]