1.C++IO流的同步和绑定

在C++中,cin和cout的速度其实不并不慢,C++中的流的IO速度相当的快,其速度与初始设定的缓存区大小和硬盘的IO速度有关。

但在C++中,为了兼容C的IO(scanf和printf),cin和cout被设置为与C的IO同步,这样导致cin和cout的速度不如scanf和printf
快。

另外,在默认情况下,标准输入设备(cin)与标准输出设备(cout)绑定在一起,它保证在调用输入之前已经刷新输出缓冲区,这样也会降低读取效率。

所以,我们可以手动取消他们与C语言IO的同步,并去掉cin和cout的绑定,加速读取,使cin的速度与scanf相差无几,甚至某些情况要快于scanf。

注:在取消绑定后,使用scanf和printf可能会出现问题,比如读取失败或者提前输出的问题,请不要再使用他们,不过可以使用getchar和gets
等读入函数。

加速代码:
 
  // 取消C++ IO与C的同步
  std::ios::sync_with_stdio(false);
   
  // 取消cin和cout的绑定
  std::cin.tie(NULL);/*等价于cin.tie(0);*/
  

2. 快读挂

在读取大量整数时,无论是cin还是scanf,都比getchar的读取效率要慢上不少,我们可以使用getchar
来模拟输入函数,在读取大量整数的时候效率会很高:

下面给出其中的一种实现方法:
 
  inline void read(int& x) {
  x = 0;
  char c;
  for (c = getchar(); c < '0' || c > '9'; c = getchar())
  ;
  for (; c >= '0' && c <= '9'; c = getchar())
  x = (x << 3) + (x << 1) + c - '0';
  }
  

3.交互式oj(如leetcode)的加速方法

将其放在solution类的上方即可,一般情况用不到。
 
  static auto __=[](){
  std::ios::sync_with_stdio(false);
  cin.tie(nullptr);
  return nullptr;
  }();
  //注意放在solution上面
  

技术
©2019-2020 Toolsou All rights reserved,
份额已超宁德时代!LG化学确认将分拆电池业务部门Qt学习7——模态和非模态对话框数字滚动抽奖小程序vue 监听 Treeselect 选择项的改变 dedecms网站被黑 劫持到其他网站如何解决内存溢出和内存泄漏的区别、产生原因以及解决方案SQL Server 数据库词汇表1190 反转每对括号间的子串 leetcode蝗灾虫群上亿只很少发生碰撞 蝗虫要成自动驾驶功臣最优化方法总结:公式解、数值优化、求解思想