0%

这是一篇简单的记录,因为我总是忘记如何从硬编码的 Array 中初始化得到一个 Vector。

1
2
3
4
5
6
7
8
9
#include <vector>

using std::vector;

int main () {
const int arr[] = {16,2,77,29};
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]));
return 0;
}

这篇文章的缘起有二:

  • 很多人主张「应当在几乎所有情况下使用 C 风格的 I/O」(比如这里),而我很怀疑;
  • 另一方面,在刷 POJ 的时候,使用 std::cin 确实能 TLE 而改成 std::scanf 就 AC 了,因此想试试看 std::cin 能否加速。

中文网络里,已有码农场byvoid 菊苣的讨论。不过二者对于原理的解释,自我感觉都不够清晰;又本着自己动手做实验的坚持,决定写下这篇文章,探讨 C++ 的读入速度的问题,特别是读入文件速度的问题。

阅读全文 »

大多数命令行工具,都会提供一些选项。在不同的选项组合之下,这些工具会有不同的行为。GNU 标准的命令行选项解析工具是 getopts,它比其兄弟 getopt 更为强大。除了介绍 getopts 的用法之外,这里还会介绍两种手工解析参数的方法。

在正式介绍之前,有必要区分几个概念(在 Shell 脚本中)。

  • Argument, Option: 中文对应「选项」,形如 -a, --save 的都是选项;选项可以接收参数(Parameter),也可以不接受参数。
  • Flag: 中文对应「标签」,形如 -v(verbose);标签是布尔值,不接受参数。

下面正式开始介绍。

阅读全文 »

使用 Linux,免不了和 Shell 打交道。和 Shell 打交道,就免不了和 Shell 的变量及字符串打交道。这里总结一下 Shell 对变量的引用和字符串处理的一些经验。

阅读全文 »

如果你经常和数据打交道,那么你肯定会经常需要对列进行操作。在 Linux 中,对纯文本文件的列操作有两个十分有用的命令:cutpaste。其中 cut 主要用于从纯文本文件中取出某些列,paste 则可以用于按列合并。

阅读全文 »