如何在c++中对2d数组中的列求和
How to sum up columns in a 2d array in c++?
我必须制作一个程序,将2d数组的列相加,并返回最小的和。这是我写的程序,但我想知道是否有更有效的方法。主程序是教授给我们的。我想知道是否有一种方法可以做到这一点,而不必为每列声明一个整数,因为如果不是总是3列,那该怎么办,谢谢。
#include <iostream>
#include <string>
using namespace std;
int smallCol( int x[][3], int row, int col){
int c1 = 0;
int c2 = 0;
int c3 = 0;
int min;
for (int r = 0; r < row; r++){
for(int c = 0; c < col; c++ ){
if(c==0)
c1 += x[r][c];
if(c==1)
c2 += x[r][c];
if(c==2)
c3 += x[r][c];
}
}
min = c1;
if(c2 < c1)
min = c2;
if(c3 < c2)
min = c3;
return min;
}
int main() {
int x[2][3] = {{3, 1, 4}, {1, 5, 9}};
cout << "Smallest column sum is " << smallCol (x, 2, 3) << endl;
// from the 2-d array x that has size 2 x 3, find the smallest col sum
// output will be 4 since col#0 contains 3 and 1 is smallest.
return 0;
}
更改嵌套循环的顺序,以便首先在列上循环,并计算该列中所有行的总数。那么,您就不需要为每列的合计设置一个变量。
int min;
for (int c = 0; c < col; c++) {
int total = 0;
for (int r = 0; r < row; r++) {
total += x[r][c];
}
if (c == 0 || total < min) {
min = total;
}
}
c == 0
测试使第一列受到特殊处理,因此它将min
初始化为第一列的总和。其余列将与之进行比较。
如果切换嵌套循环,则只能使用一个变量:
#include <limits>
int smallCol( int x[][3], int row, int col){
int min = std::numeric_limits<int>::max();
// or something really big... like 2147483647
for (int c = 0; c < col; ++c ) {
int sum = 0;
for(int r = 0; r < row; ++r ) {
sum += x[r][c];
}
if ( min > sum ) {
min = sum;
}
}
return min;
}
编辑
如果你不能按照分配的方式修改程序的主要结构,你可以使用向量来存储部分总数,然后扫描它以找到最小值:
std::vector<int> sums(col);
for (int r = 0; r < row; ++r ) {
for(int c = 0; c < col; ++c ) {
sums[c] += x[r][c];
}
}
for( int c = 0; c < col; ++c ) {
if ( min > sums[c] ) {
min = sums[c];
}
}
对于非常大的矩阵,这可能也更适合缓存,因为内存中元素的邻接性,从而产生更快的代码。
int smallCol
{
auto min = std::numeric_limits<int>::max();
for (auto i = 0; i < col; ++i)
{
auto m = std::accumulate(x, x + row, 0, [i](int sum, auto && row) { return sum + row[i]; });
if (m < min) min = m;
}
return min;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 使用动态数组求和和和求平均值
- 平衡数组索引,同时从左和右对数组求和
- C++ 如何从文本文件中扫描二维数组并对行求和?
- 动态规划 - 在数组中查找目标求和方式
- 数组中的"Maximum Sum mod M"范围:求和和计数
- 数组的并行求和比C++中的顺序求和慢
- 在 c++ 中对 2D 数组列求和
- 如何在c++中对2d数组中的列求和
- 用于从包含最大求和的整数数组中提取子数组的算法
- 循环访问 CUDA 中的三维数组以对它们的元素求和
- 我如何确定我是否可以将数组中的某些元素求和为 K
- 求和除以4的数组数
- CUDA/推力:如何对交错数组的列求和
- C++将字符串数组转换为整数,然后求和int数组
- 从文件中读取数据到2d数组中,并使用c++对特定数组求和
- 如何使用本函数对两个字符数组进行元素相乘,并将相乘结果求和为int
- 如何"bind"对现有矩阵的列和行求和的数组?
- 返回不正确值的数组的顺序求和
- c++,最快的STL容器,用于递归地执行{delete[begin], insert[end]和对整个数组内容求和}