这篇文章的缘起有二:
- 很多人主张「应当在几乎所有情况下使用 C 风格的 I/O」(比如这里),而我很怀疑;
- 另一方面,在刷 POJ 的时候,使用
std::cin确实能 TLE 而改成std::scanf就 AC 了,因此想试试看std::cin能否加速。
中文网络里,已有码农场和 byvoid 菊苣的讨论。不过二者对于原理的解释,自我感觉都不够清晰;又本着自己动手做实验的坚持,决定写下这篇文章,探讨 C++ 的读入速度的问题,特别是读入文件速度的问题。
大多数命令行工具,都会提供一些选项。在不同的选项组合之下,这些工具会有不同的行为。GNU 标准的命令行选项解析工具是 getopts,它比其兄弟 getopt 更为强大。除了介绍 getopts 的用法之外,这里还会介绍两种手工解析参数的方法。
在正式介绍之前,有必要区分几个概念(在 Shell 脚本中)。
-a, --save 的都是选项;选项可以接收参数(Parameter),也可以不接受参数。-v(verbose);标签是布尔值,不接受参数。下面正式开始介绍。
使用 Linux,免不了和 Shell 打交道。和 Shell 打交道,就免不了和 Shell 的变量及字符串打交道。这里总结一下 Shell 对变量的引用和字符串处理的一些经验。
如果你经常和数据打交道,那么你肯定会经常需要对列进行操作。在 Linux 中,对纯文本文件的列操作有两个十分有用的命令:cut 和 paste。其中 cut 主要用于从纯文本文件中取出某些列,paste 则可以用于按列合并。
使用 Linux 的过程中,我们经常会想看看系统的信息、状态。这里做一个速查表。