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


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

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

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

    2.原因:

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

    3.一种解决办法:

    跳过skipws标志

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

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

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

    所以,在需要对逐个字符串读取的情况下,使用ifstream inputfile("xxxx");时效率是非常低下的。

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

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

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

  • 相关阅读:
    Java面試題(实用性高)
    索引的概述?
    给Eclipse提速的7个技巧
    ETL数据仓库
    实用SQL语句大全
    考证
    PL/SQL 程序
    eclipse
    httpd.conf详解,因为php始终报fileinfo扩展无法加载的错
    dockerfile创建镜像及容器
  • 原文地址:https://www.cnblogs.com/liangjf/p/10634078.html
Copyright © 2020-2023  润新知