第一次问,我在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)));
}
}
答案 0 :(得分:1)
C ++中的数组不是对象,因此它们没有为它们定义任何像size()这样的方法。
所以,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(first,last,sum);
您不需要使用std,因为您已经在使用命名空间std。
“使用命名空间标准”;语句会自动在程序中所需的位置添加std ::。
最后,编写的问题不是很清楚,因此,我无法弄清楚该程序的动机或预期输出。
但是,如果按照此答案的指示在所需的位置进行了更正,则程序将成功运行。