c++ - 如何加快程序执行速度

标签 c++ c

这是一个非常简单的问题,但不幸的是,我卡住了,不知道该怎么做。我的程序是一个简单的程序,不断接受 3 个数字并输出 3 个数字中最大的一个。程序一直运行直到用户输入一个字符。

正如标题所说,我的问题是如何让这个执行得更快(会有大量的输入数据)。接受任何形式的帮助,包括使用不同的算法或使用不同的函数或更改整个代码。

我对 C++ 标准不是很有经验,因此不知道不同库中可用的所有不同函数,所以请解释你的原因,如果你太忙,至少尝试提供一个链接.

这是我的代码

#include<stdio.h>
int main()
  {
    int a,b,c;
    while(scanf("%d %d %d",&a,&b,&c))
      {
         if(a>=b && a>=c) 
            printf("%d\n",a);
         else if(b>=a && b>=c) 
            printf("%d\n",b);
         else 
            printf("%d\n",c);
      }
    return 0;
  }

它的工作非常简单。 while 循环将继续执行,直到用户输入一个字符。正如我之前解释的那样,该程序接受 3 个数字并输出最大的一个。这段代码没有其他部分,仅此而已。我已经尽力解释了。如果您还需要我这边的任何东西,请询问,(我会尽力而为)。

我正在使用 CPP 4.9.2 在 internet 平台上编译(那边是这么说的)

我们将不胜感激任何形式的帮助。提前致谢

编辑

输入由电脑完成,输入没有延迟。

另外,我会接受 c 和 c++ 的答案。

更新

我还想问一下是否有任何通用的库函数或算法,或任何其他类型的建议(我们必须做的某些事情和我们不能做的事情)可以遵循以加快执行速度(不仅仅是为了这段代码,但一般来说)。任何帮助,将不胜感激。 (很抱歉在没有提供任何引用资料的情况下提出如此尴尬的问题)

最佳答案

你的“算法”非常简单,我会使用 max() 函数来编写它,因为它是更好的风格。

但是无论如何...

花费最多时间的是scanf。这是你的瓶颈。您应该编写自己的读取函数,该函数使用 fread 读取一个巨大的 block 并对其进行处理。您可以考虑异步执行此操作 - 但我不建议将此作为第一步(某些异步实现确实比同步实现慢)。

所以基本上您执行以下操作:

  1. 从文件中读取一个巨大的 block 到内存中(这是磁盘 IO,所以这是瓶颈)
  2. 解析该 block 并找到您的三个整数(注意 block 边界!前两个整数可能位于一个 block 内,第三个位于下一个 - 或者 block 边界在中间分割您的整数,所以让您的解析器只是捕捉那些东西)
  3. 做你的比较 - 与磁盘 IO 相比,它运行得非常糟糕,所以不需要改进

关于c++ - 如何加快程序执行速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608667/

相关文章:

c++ - 避免多个互斥锁以保护类似的竞争条件

c++ - 据说 map.find() 和 map.end() 迭代器不兼容?

c++ - 如何高效地写入大量文件

c - C中ECC的实现

C - BitArray 段错误

c++ - 使用 gprof 显示模板化方法调用图的参数格式?

C++ std::ofstream - 移动放置指针

c - 如何对窗口进行编程以使用退出键关闭

c - 使用 O_APPEND 打开文件后写入文件时出错 | O_CREATE

c - 是否有一种传统方法可以在 C 中花费恰好一个时钟周期?