首页 > 解决方案 > 在 C++ 中,哪个更快?获取输入,存储在数组中并同时添加或获取输入并存储为数组,然后总结?

问题描述

我有一个场景,我必须从用户那里获取 n 个输入并将其存储在一个数组中,并且我还需要找到数组中所有元素的总和。由于它在 codeforces 中,我想知道最佳的方法。

通常,I/O 操作因占用大量 CPU 时间而臭名昭著。如果我经常从 I/O 和处理切换而不是先获取普通输入然后再处理总和,它是否会对大规模输入(即 1000 次输入)产生性能影响?

我使用的是 C++ 语言和在线法官(Codeforces)。

第一种方法:我循环 n 次并从输入流中读取 n 个输入,并将它们一个一个放入数组中。然后把它们全部加起来。

int n, sum=0;
cin >> n;

int *myarray = new int[n];

for(int i=0; i<n; i++)
{
    cin >> myarray[i];
}

for(int i=0; i<n; i++)
{
    sum += myarray[i];
}

第二种方法:我循环n次并读取n个输入。每次,我将它放在一个数组中,并将我刚刚作为输入的数字相加。

int n, sum=0;
cin >> n;

int *myarray = new int[n];

for(int i=0; i<n; i++)
{
    cin >> myarray[i];
    sum += myarray[i];
}

标签: c++arraysperformanceinputoutput

解决方案


在这样的程序中,您有一个单独的线程来获取用户输入,将其存储在一个数组中并对其求和,不会有(明显的)差异 - 无论如何都会发生相同的操作。

更明显的优化是丢失数组。如果所需的输出只是总和,您可以直接对输入求和而不存储它们:

int sum = 0;
for(int i=0; i<n; i++)
{
    int temp;
    cin >> temp;
    sum += temp;
}

推荐阅读