《条目二十九:对于逐个字符的输入请考虑istreambuf_iterator》

《条目二十九:对于逐个字符的输入请考虑istreambuf_iterator》

1.使用:
ifstream inputfile("xxxx");
string fileDate((istream_iterator<char>(inputfile)), istream_iterator<char>());

在流输入的时候遇到空格就跳过,也就是不会读入空格字符。测试

2.缘由:

istream_iterator使用operator>>来完成这个读入操做的,然而operator>>会跳过空白字符。code

3.一种解决办法:

跳过skipws标志对象

ifstream inputfile("xxxx");
inputfile.unsetf(is::skipws);//禁止忽略inputfile中的空格
string fileDate((istream_iterator<char>(inputfile)), istream_iterator<char>());
4.不良反应:

每调用一次operator>>都会附加好多操做:ip

  • 1.内部sentry对象的构造和析构
  • 2.检查可能影响流的标志
  • 3.检查全部可能发生的错误
  • 4.检查流输入的异常发生

因此,在须要对逐个字符串读取的状况下,使用ifstream inputfile("xxxx");时效率是很是低下的。字符串

在这里就引用这个条目的方法:

ifstream inputfile("xxxx");
string fileDate((istreambuf_iterator<char>(inputfile)), istreambuf_iterator<char>());

经有人测试,效率比原来的提升40%。input

相关文章
相关标签/搜索