c ++中的快速输入输出

时间:2013-12-27 14:32:19

标签: c++

我知道c ++中INTEGER的快速输入输出方法(使用getchar_unlocked)。在c ++中有没有一种快速I / O用于long long int的方法?

int和string的快速输入输出位于以下链接 - http://abhisharlives.blogspot.in/2012/06/really-fast-io-methods-for-programming.html

1 个答案:

答案 0 :(得分:1)

  

我知道c ++中INTEGER的快速输入输出方法(使用getchar_unlocked)。在c ++中有没有一种快速I / O用于long long int的方法?

是。考虑长时间使用std :: cin / std :: cout以及所有其他I / O需求。

如果标准I / O流的默认设置对您的需求来说太慢,请考虑禁用与C I / O层的同步(调用std::ios_base::sync_with_stdio(false);)并使用无缓冲的读写。

将printf / scanf代码添加到代码库中会在代码库中引入有问题的代码区域(它们依赖于客户端代码来检查错误情况并以静默方式失败,对于自定义类型是不可扩展的,以及如果更改数据类型,编译器无法确定格式字符串也应该更改(*)。


(*) - 大多数现代编译器实际上会警告你格式字符串是否与数据类型不匹配,但这并不是强制要求的(这是非标准特性)并依赖于编译器警告< EM>不明智:

代码发出警告:

float i = 0.;
printf("%x", i);

代码未发出警告:

void my_print(char *format, float f) {
    printf(format, f); // if the format string is not a literal
                       // injected into the
                       // function directly, the warning is not
                       // issued because the 
                       // format string cannot be checked statically
}

float i = 0.;
char * format = "%x";
my_print(format, i); // fails silently;