《條目二十九:對於逐個字符的輸入請考慮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

相關文章
相關標籤/搜索