【发布时间】:2021-09-11 05:31:10
【问题描述】:
我有一个场景,我必须从用户那里获取 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];
}
【问题讨论】:
-
对输入求和,不需要数组
-
您能做的最好的事情就是自己测试一下。运行第一个代码 X 次,计算结果。然后运行第二个代码 X 次,计算结果。哪个更快?
-
"I/O 操作因占用大量 CPU 时间而臭名昭著": false。它们花费 已用 时间,而 CPU 时间很少或根本没有。当您从
cin阅读时,您受到用户输入速度的 I/O 限制,这比 CPU 慢了许多数量级,这太荒谬了。没有理由期望您的两种方案之间有任何区别。
标签: c++ arrays performance input output