【发布时间】:2017-02-20 04:57:51
【问题描述】:
对于某个程序,我有两个函数接受输入和输出流,对输入进行一些操作并写入输出。我可以这样称呼他们:
a(cin, cout);
b(cin, cout);
假设我想按顺序运行它们,以便应用来自 a 和 b 的操作。目前,我使用 stringstream 作为中间 iostream 来存储结果,如下所示:
stringstream buffer;
a(cin, buffer);
b(buffer, cout);
然而,这几乎否定了流的使用,因为所有数据都保留在内存中以用于中间步骤,即使这两种操作都可以应用于具有恒定内存的流。
是否有一种(标准)技术可以用来组合这些操作,最好不要过多地更改a 和b?另外,如果可能的话,我想避免提升。
注意:此处的函数仅用于示例目的。在实际程序中,两者都是两个对象上的方法。
【问题讨论】:
-
你是说你想做一些类似于 std::endl 的事情(实际上是一个函数)?
-
但是,这几乎否定了流的使用,因为所有数据都保留在内存中以用于中间步骤,即使这两种操作都可以应用于具有恒定内存的流。从您的帖子中不清楚为什么这是一个问题。从性能的角度来看,我认为将数据保存在内存中会是一个加分项。
-
@UKMonkey 我不确定它是如何工作的,但如果它可以帮助我创建与我的第二个代码示例等效的功能,是的。
-
@RSahu:如果我可以编写动作,我可以直接发送我的数据,所以如果我的输入是 1TB 大小,我实际上不需要 1TB 的内存来存储中间结果。所以这实际上是一个问题。
-
一个主要问题是您的第一个操作被设计为在调用第二个操作之前运行完成。即使您使用 fifo 或其他东西将流连接在一起,您仍然不会并行执行这两个操作,除非您还使用另一个线程或重组您的操作以处理较小的数据块。