【问题标题】:Adding elements of a specific column of an array添加数组特定列的元素
【发布时间】:2019-12-14 10:58:00
【问题描述】:

嗯。我在一列中添加元素时遇到问题。该数组是用户定义的。好吧,我的代码没有添加第一列,而是添加了第三行。好吧,我的代码正在使用预定义的数组,但不适用于用户定义的数组。如下所示!

int r, c, array[r][c], sum = 0;
cout<<"Enter number of Rows ";
cin>>r;
cout<<"Enter number of columns ";
cin>>c;
for(int i=0; i<r; i++)
{
    for(int j=0; j<c; j++)
    {
        cout<<i<<j<<")";
        cin>>array[i][j];
    }
}
for(int l=0; l<r; l++)
{
    for(int k=0; k<c; k++)
    {
            if(l==0)
            {
                sum = sum + array[l][k];
            }
    }
}
cout<<"Sum for first colomn is "<<sum;

enter image description here

【问题讨论】:

  • 为什么不直接循环第一列,不需要两个循环
  • 顺便说一下第一列是当k==0时
  • 可变大小的数组在 C++ 中无效

标签: c++ arrays multidimensional-array


【解决方案1】:

rc 初始化之前声明数组:

int r, c, array[r][c], sum = 0;

之后向用户询问rc 的值不会有帮助。即使您先询问大小然后声明数组,array[r][c] 也是一个非标准 C++ 的可变长度数组 (VLA)。

std::vector 用于动态大小的数组:

int r,c;
std::cin >> r >> c;
std::vector< std::vector<int>> array(r, std::vector<int>(c));

【讨论】:

    【解决方案2】:

    第一个错误是你在使用

    int r, c, array[r][c], sum = 0;
    

    这一行用于初始化二维数组。但是rc 中的值是垃圾。因此,您的二维数组不会根据您的需要创建。它会将您的输入值分配给随机地址。从用户获取输入后,您应该动态创建二维数组(如果您想使用用户特定的数组大小)。

    为此,您需要熟悉new 关键字,它可以动态创建用户定义类型的数组。

    第二个错误是你在 if(l==0) 的行上应用 if 条件,因为 l 代表那里的行,你应该用 k 替换它,它代表这里的列以获得列的总和。 这是您的代码的正确版本

    int r, c, sum = 0;
    int **array;
    cout<<"Enter number of Rows ";
    cin>>r;
    cout<<"Enter number of columns ";
    cin>>c;
    array = new int*[r];
    for(int i=0; i<r; i++)
    {
        array[i]=new int[c];
    }
    for(int i=0; i<r; i++)
    {
        for(int j=0; j<c; j++)
        {
            cout<<i<<j<<")";
            cin>>array[i][j];
        }
    }
    for(int l=0; l<r; l++)
    {
        for(int k=0; k<c; k++)
        {
                if(k==0)
    
                {
                    sum = sum + array[l][k];
                }
        }
    }
    cout<<"Sum for first colomn is "<<sum;
    

    注意:不要忘记释放动态分配的内存。

    您还可以使用stl 库中的vector。一旦您熟悉了它,对于动态用户定义的数组使用它非常方便。

    【讨论】:

    • 好吧,K 用 l 代替了 L,因为我认为在外循环中使用它会很容易!
    • 外循环是针对行的,所以如果你使用'l'将模拟行,内循环是针对列,所以你需要使用'k'来总结列。如果您需要它有帮助,请投票,谢谢,
    【解决方案3】:

    此代码中有 3 个错误:

    • 首先,用维度 r 和 c 变量 before you have initilize them 初始化数组。 (如果使用运算符的输入,则不能使用预分配维度数组,但可以使用 std::vector 或双指针变量上的动态分配,另一种解决方案可以在启动时超大数组然后只使用你需要的行和列)

    • 第二个你必须使用k==0 作为第一列而不是l==0

    • 现在第三个是性能问题,如果列的索引是固定的,为什么还要使用嵌套的 for 循环? 不用"if""for"

    • 也可以直接访问变量

    【讨论】:

    • 赞赏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2021-08-15
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多