【常用技巧】快读/快输
使用 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!