Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建ostream 我试图创建一个C++的OFFLE,因为教育的原因。我的测试将创建一个ostream,它的行为类似于一个ofstream,只是它不会写入一个文件,而是写入一个deque或矢量容器。_C++_Std_Ostream - Fatal编程技术网

创建ostream 我试图创建一个C++的OFFLE,因为教育的原因。我的测试将创建一个ostream,它的行为类似于一个ofstream,只是它不会写入一个文件,而是写入一个deque或矢量容器。

创建ostream 我试图创建一个C++的OFFLE,因为教育的原因。我的测试将创建一个ostream,它的行为类似于一个ofstream,只是它不会写入一个文件,而是写入一个deque或矢量容器。,c++,std,ostream,C++,Std,Ostream,使用std::stringstream #include <iostream> #include <sstream> int main() { std::stringstream s; s << "Plop" << 5; std::cout << s.str(); } #包括 #包括 int main() { std::strings; s如果没有更多关于您想要做什么的详细信息,很难说得太具体,但是您不想

使用std::stringstream

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream   s;
    s << "Plop" << 5;

    std::cout << s.str();
}
#包括
#包括
int main()
{
std::strings;

s如果没有更多关于您想要做什么的详细信息,很难说得太具体,但是您不想创建一个新的ostream。您要做的是创建一个新类型streambuf,并使用现有的ostream


最简单的方法是从std::basic_filebuf继承,重载sync()和overflow()方法,将元素添加到数据结构中。

我要说的是,您不必为此编写类似于ostream的类。您可以使用适配器来实现您的目标

例如,此代码读取istream并将每个元素插入向量:

vector<string> V;
copy(istream_iterator<string>(cin), 
     istream_iterator<string>(), 
     back_inserter(V)); 
向量V; 复制(istream_迭代器(cin), istream_迭代器(), 背部插入器(V);
正如你所说的教育,我将向你展示我将如何做这样的事情。否则,
stringstream
才是真正的出路

听起来您想创建一个streambuf实现,然后将其写入vector/deque

模板
结构basic_seqbuf:std::basic_streambuf{
typedef std::基本类型;
typedef typename base_type::int_type int_type;
typedef typename base_type::traits_type traits_type;
虚拟整数类型溢出(整数类型ch){
if(traits_type::eq_int_type(ch,traits_type::eof()))
返回字符类型::eof();
c、 推回(traits_type::to_char_type(ch));
返回ch;
}
序列常量&get_Sequence()常量{
返回c;
}
受保护的:
序列c;
};
//方便的typedef
typedef basic_seqbuf seqbuf;
typedef basic_seqbuf wseqbuf;
您可以这样使用它:

seqbuf s;
std::ostream os(&s);
os << "hello, i'm " << 22 << " years old" << std::endl;
std::vector<char> v = s.get_sequence();
seqbuf s;
标准::ostream操作系统(s);

os也许你可以改进你的问题来问一个实际的问题。谢谢你的代码片段。虽然这里使用相同的方法来禁用输出,但我想知道是否最好进行每个字符的处理(因为
overflow
一次只取一个字符),或者是否有任何方法可以相交
basic\u streambuf::sputn(const char*s,streamsize n)
?虽然它可以写一个字符串,但它可能打算把“5”写成一个二进制整数。@JeroenBollen:使用已经存在的东西更容易做到这一点:。
std::cout
seqbuf s;
std::ostream os(&s);
os << "hello, i'm " << 22 << " years old" << std::endl;
std::vector<char> v = s.get_sequence();
typedef basic_seqbuf< char, char_traits<char>, std::deque<char> > dseq_buf;