第一次问的时候,我在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::。
最后写的问题不是很清楚,因此,我无法找出动机或预期的程序输出。
但是,如果按照这个答案中的指示,在所需的位置进行更正,程序将成功运行。