【常用技巧】快读/快输
使用 scanf / printf
在默认情况下,std::cin/std::cout 是极为迟缓的读入/输出方式,而 scanf/printf 比 std::cin/std::cout 快得多。
然而有的时候使用scanf/printf进行输入输出十分繁琐,因此我们可以采取取消同步流的方式直接使用std::cin/cout。
取消同步流传输
std::ios::sync_with_stdio(false)可以用来关闭stdio的兼容并解除std::cin和std::cout的绑定,从而达到较快的输入和输出。
但是在这样做之后要注意不能同时使用 std::cin 和 scanf,也不能同时使用 std::cout 和 printf,但是可以同时使用 std::cin 和 printf,也可以同时使用 scanf 和 std::cout。
std::cin.tie(0),cout.tie(0)可以用来解除std::cin和std::cout之间的绑定,从而进一步优化输入和输出。
但是要注意使用了这个以后不能再使用std::cout << endl原因在于endl不仅有换行的功能,同时也会刷新缓冲区,因此建议使用std::cout << '\n'进行换行,否则不会有优化提升。
使用getchar进一步读入优化
众所周知,getchar 是用来读入 的数据并将其转换为 char 类型的函数,且速度很快。
代码实现
1 | template<typename Type> |
以上代码可以做到比用scanf()函数快 倍的速度读入任意整数。读入 可写为 num = read();
使用putchar进一步输出优化
同样是众所周知,putchar 是用来输出单个字符的函数。
1 | template<typename Type> |
更极致的输入和输出
个人感觉没有什么必要,不做解释,阐述如下。
Reference
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Thy's Blog!
