gpt4 book ai didi

c++ - 按行反转 ostringstream

转载 作者:行者123 更新时间:2023-11-30 00:52:31 25 4
gpt4 key购买 nike

ostringstream ss;
ss << "(1,2)\n" << "(1,3)\n" << "(1,4)\n" ;
cout << ss.str();

应该打印以下内容:

(1,2)

(1,3)

(1,4)

我怎样才能按行反转输出以便打印:

(1,4)

(1,3)

(1,2)

最佳答案

您可以使用自定义 std::streambuf,它在内部保留一堆 std::string 并在使用 str() 时将它们放在一起 成员。例如:

#include <iostream>
#include <numeric>
#include <streambuf>
#include <string>
#include <vector>

class stackbuf
: public std::streambuf
{
std::vector<std::string> d_lines;
int overflow(int c) {
if (c != std::char_traits<char>::eof()) {
this->d_lines.back().push_back(c);
if (c == '\n') {
this->d_lines.push_back(std::string());
}
}
return std::char_traits<char>::not_eof(c);
}
public:
stackbuf(): d_lines(1) {}
std::string str() const {
return std::accumulate(this->d_lines.rbegin(),
this->d_lines.rend(),
std::string());
}
};

int main()
{
stackbuf sbuf;
std::ostream out(&sbuf);
out << "(1, 2)\n(1, 3)\n(1, 4)\n";
std::cout << sbuf.str();
}

对于真实世界的应用程序,显然,您应该在流缓冲区中设置一个缓冲区以提高性能。您可能还想创建一个自定义流,直接初始化流的流缓冲区。

关于c++ - 按行反转 ostringstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com