content.assign(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()); 注:另外有的程序员使用 ifstream 读取文件内容,然后直接赋值给std::string对象,肯定是错误的。因为:读取的char*类型赋值给string时,默认遇到 \0 就会结束,会丢弃后面的字符。
因此,整个表达式就等价于: std::istreambuf_iterator<char>begin(file); std::istreambuf_iterator<char>end; std::string strJson(begin,end);
所以,在需要对逐个字符串读取的情况下,使用ifstream inputfile("xxxx");时效率是非常低下的。 在这里就引用这个条目的方法: ifstreaminputfile("xxxx");stringfileDate((istreambuf_iterator<char>(inputfile)),istreambuf_iterator<char>()); 经有人测试,效率比原来的提高40%。
#include<fstream>#include<iostream>#include<iterator>using namespace std;intmain(){ifstreamin("test.cpp");istreambuf_iterator<char>isb(in),end;ostreambuf_iterator<char>osb(cout);while(isb!=end)*osb++=*isb++;cout<<endl;return0;} 这段代码的意思是把test.cpp中的内容读出来并打印到终端上...
// construct an istreambuf_iterator pointing to // the ofstream object underlying stream buffer istreambuf_iterator<char> iter(out.rdbuf()); // construct an end of stream iterator istreambuf_iterator<char> end_of_stream_iterator; cout << endl; // output the content of the file while( ...
#include <iostream>#include <iterator>#include <sstream>#include <string>intmain(){// typical use case: an input stream represented as a pair of iteratorsstd::istringstreamin{"Hello, world"};std::istreambuf_iterator<char>it{in}, end;std::stringss{it, end};std::cout<<"ss has "<<...
std::istreambuf_iterator<char> it(file); std::cout << *next(it) << std::endl; std::cout << *it << std::endl; } 输出为: $ ./test B B 而不是我希望的: $ ./test B A 换句话说,增加迭代器的一个副本会产生增加所有迭代器的净效果! 我意识到文件流迭代器有局限性,因为它们只能对...
类似地,表达式 std::istreambuf_iterator<char>(t) 创建一个 std::istreambuf_iterator<char> 对象,将流 t 作为参数传递给其构造函数。并且 std::istreambuf_iterator<char>() 创建一个默认构造的对象。 代码的作用是一种“简单”的方法,将文件中的所有字符 file.txt复制到字符串 str中。最新...
template<class charT, class traits = char_traits<charT> > class istreambuf_iterator : public input_iterator { public: typedef charT char_type; typedef typename traits::int_type int_type; typedef traits traits_type; typedef basic_streambuf<charT, traits> streambuf_type; typedef basic_istream<...
Effective_STL 学习笔记(二十九) 需要一个一个字符输入时考虑使用 istreambuf_iterator 使用istreambuf_iterator : 1ifstream inputFile("interestingData.txt");2stringfileData( (ifstreambuf_iterator<char>(inputFile)), istreambuf_iterator<char>() );...