【问题标题】:Fast input/output for Competitive Programming竞争性编程的快速输入/输出
【发布时间】:2021-01-07 17:45:50
【问题描述】:

我看到人们在竞争性编程中广泛使用这个 sn-p 来实现快速 i/o

ios_base::sync_with_stdio(false);
cin.tie(NULL);

虽然我从这里了解它的主要作用:

Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);

我想知道为什么不包括这个语句

cout.tie(NULL);

i.e" 这对程序有什么不同或实现了与程序相同的目标

cin.tie(NULL);

还有必要用 NULL 或 false 代替 0 和 1。

【问题讨论】:

  • 我敢冒险,只使用 C 风格的 I/O 比试图让 C++ iostream 具有性能更简单......

标签: c++


【解决方案1】:

coutcin 绑定,而不是相反。

cout 绑定到cin 意味着cout 在读取cin 时会自动刷新。

cout.tie(nullptr); 毫无意义,因为cout.tie() 已经是nullptr


NULL 等效于 0。表示空指针的 C++ 类型安全的方法是 nullptr

【讨论】:

    【解决方案2】:

    正如您在this 示例和docs 中所见,std::cinstd::cerr 默认都绑定到std::cout,但这种关系是单向的。无需调用cout.tie(NULL),因为绑定的流已经是nullptr。该声明将无效。

    您将无法使用1 的参数; tie 采用指向 std::ostream 的指针。 0/NULL/false 由于隐式转换,所有工作都可以解开流,但是要将两个流绑定在一起,您需要类似 std::cout.tie(&std::cerr) 的东西。

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 2022-01-12
      • 2017-04-19
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多