大数据文件读取技巧

一、ios::sync_with_stdio(false);

    

    作用数据(文件)读取速度更快

    

    算法竞赛中,关闭iostream对象和cstdio流同步以提高输入输出的效率。

   即调用ios::sync_with_stdio(false);    

    特别注意:

    (1)关闭后C++ IOCIO不能混用,cin不能与scanfsscanf, getchar, fgets等混用,cout不能与printfputs等混用,否则IO会混乱。

    (2)在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)0表示NULL)来解除cincout的绑定,进一步加快执行效率。即调用std::cin.tie(0);

#include <iostream>
int main() 
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    // 下面进行IO
}

注:

C++ 双冒号开头的语法功能:命名空间限定

如:

std::string  //表示std命名空间下的 string类

补充:双冒号(::)用法

1)表示域操作符
例:声明了一个类 A ,类 A 里声明了一个成员函数 void f() ,但没有在类的声明里给出 f 的定义,那么在类外定义 f 时,  
就要写成 void A::f() ,表示这个 f() 函数是类 A 的成员函数。
2)直接用在全局函数前,表示是全局函数  
例:在 VC 里,你可以在调用 API 函数前,在 API 函数名前加::
3)表示引用成员函数及变量,作用域成员运算符

    std是一个全局命名空间  ios是一个内部命名空间(位于std下)

    所以引用方式如下

    ::std::ios::ostream

    ::std::string

    当没有冲突的时候,全局的::(也就是第一个)可以省略


二、使用std::ios::tie与std::ios_base::sync_with_stdio加速流

1. std::ios_base::sync_with_stdio 

  cstdio[静态]切换同步

    打开或关闭所有的标准iostream流与它们对于的标准C流之间的同步。

    实际上,这意味着C++C流使用相同的缓冲区,因此,可以自由地混合使用流。同步C++标准流可以确保线程安全。

默认情况下,iostream对象和cstdio流同步。如果同步关闭,C++标准流独立地缓冲输入输出,在某些情况下,这是相当快速的。

  参数

    syn

    用于指示是否同步的布尔值,值为true开启同步,为false时关闭同步。

  返回值

    返回被调用之前的同步状态。当它第一次被调用,总是返回true

  使用样例

#include <iostream>
#include <cstdio>
 
int main()
{
    std::cout.sync_with_stdio(false);
    std::cout << "a\n";
    std::printf("b\n");
    std::cout << "c\n";
}

    程序输出

    b

    a

    c

2. std::ios::tie

    在默认的情况下cin绑定的是cout,c++11cincerr都默认和cin绑定。


其它加速方法

    使用'\n'或者"\n"代替endl。即使用cout<<'\n';cout<<"\n";






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值