c++ - 在 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];
}
解决方案
在这样的程序中,您有一个单独的线程来获取用户输入,将其存储在一个数组中并对其求和,不会有(明显的)差异 - 无论如何都会发生相同的操作。
更明显的优化是丢失数组。如果所需的输出只是总和,您可以直接对输入求和而不存储它们:
int sum = 0;
for(int i=0; i<n; i++)
{
int temp;
cin >> temp;
sum += temp;
}
推荐阅读
- firebase - 在保持优化的同时保护 Firebase 实时数据库
- flutter - 使用 build_runner 在子模块中构建 JsonSerializable 模型
- nativescript - RadSideDrawer 中不再有 BindingContext 了吗?
- youtube-api - Youtube 直播无效嵌入设置
- c# - 使用 Automapper 将方法映射到字段
- aws-appsync - aws appsync auth 指令未按预期限制访问
- ios - 如何在应用程序生命周期内处理自动续订订阅结束
- r - 我如何在 dplyr 中使用 group_by 以单个组为中心?
- jmeter - jmeter:在线程组之间共享字符串数组
- angular - Docker-compose Angular 应用程序 UnixHTTPConnectionPool(host='localhost', port=None):读取超时。(读取超时=200)