第一次问的时候,我在c++里还不太懂,所以请温柔一点谢谢!
我有一个给定的问题:如果值是3,我有一个2行2列的矩阵,我希望我的程序在元素低于给定值(3)的行和列之间做最大值。
以下是我尝试过的:

#include <iostream>
#include <stdint.h>
#include <stdio.h>
#include <algorithm>
#include <numeric>

using namespace std;


int main() {

    int e, markLine[0],markRow[0];

    int ary[2][2] = { {2,3},
                      {3,2} };
    e=3;

    for (int i =0; i < markRow.size(); i++)
    {
        for (int j=0; j< markLine.size(); j++)
        if( ary[i][j] < e ) {
            markLine[i]=1;
            markRow[j]=1;
        }
        std::cout << (std::max(std::accumulate(markLine),std::accumulate(markRow)));
    }

}

最佳答案

C++中的数组不是对象,因此它们没有为它们定义的任何方法,如siz()。
所以,markRow.size()是错误的。
在变量声明语句中,整数数组markline[]和markrow[]需要指定一个大小。所以,写markline[0]和markrow[0]就意味着正在创建大小为0的数组。那是错误的。
为markline[]和markrow[]指定大小。
用零值分配markline[]和markrow[]只用于循环,分别初始化或直接初始化它们(因为它们是非常小的数组)

for(i=0;i<2;i++)
{
 markRow[i]=0;
 markLine[i]=0;
}
//or
//markRow[ ]={0,0};
//markLine[ ]={0,0};

accumulate函数的工作方式不像所写的那样,但它需要三个参数。开始位置、结束位置和第三个变量,它与计算出的部分和相加。
accumulate(first,last,sum);
您不需要使用std,因为您已经在使用名称空间std。
“using namespace std;”语句会在程序需要的任何地方自动添加std::。
最后写的问题不是很清楚,因此,我无法找出动机或预期的程序输出。
但是,如果按照这个答案中的指示,在所需的位置进行更正,程序将成功运行。

10-07 20:01