2D阵列的最小/最大元素
float allmin[column];
float allmax[column];
float min= std::numeric_limits<float>::max();
float max= std::numeric_limits<float>::min();
for(int y = 0; y < column; y++)
{
for(int x = 0; x < row; x++)
{
allmin[y] = std::min(matrix[x][y], min);
allmax[y] = std::max(matrix[x][y], max);
}
cout << "Mins " << allmin[y] << "\n";
}
我需要每列的最小元素。我的矩阵是250x6,它打印的是矩阵的最后一行。2D阵列的最小/最大元素
需要两个更正:
不要为每个列的相同的变量,而是一个不同的,就像直接在allmin
和allmax
行。
在进入循环之前对其进行初始化。一个经典的解决方案是用行的第一个元素初始化它,并检查循环中的下一个元素。
for(int y = 0; y < column; y++)
{
allmin[y] = matrix[0][y];
allmax[y] = matrix[0][y];
for(int x = 1; x < row; x++)
{
allmin[y] = std::min(matrix[x][y], allmin[y]);
allmax[y] = std::max(matrix[x][y], allmax[y]);
}
cout << "Mins " << allmin[y] << "\n";
}
它会更有意义。它返回矩阵中不存在的值。我得到的值从1到5000,2个浮点并将其返回分钟] 7.18866e-43 分钟] 0 分钟] -7.85255e + 06 分钟] 4.57692e-41 分钟] 1.68436e-42 分钟] 3.05483e-43 –
因为声明allmin[y] = std::min(matrix[x][y], min);
,该matrix[x][y] is always small than
分钟(的std :: numeric_limits ::最大()), so when internal loop execute,
allmin [Y] is updated to ·matrix[x][y]
每一个时间,所以在最后allmin[y]
更新为matrix[259][y]
(y
行的最后一列) 。 allmax[y] = std::max(matrix[x][y], max);
有同样的问题。
您应该将您的代码更改为 ``` float allmin [column]; float allmax [column]; float min = std :: numeric_limits :: max(); float max = std :: numeric_limits :: min();
for(int y = 0; y < column; y++)
{
allmin[y] = min
allmax[y] = max
for(int x = 0; x < row; x++)
{
allmin[y] = std::min(matrix[x][y], allmin[y]); //allmin[y] always store the min value has meet before
allmax[y] = std::max(matrix[x][y], allmax[y]); //allmax[y] always store the max value has meet before
}
cout << "Mins " << allmin[y] << "\n";
}
,一切都会好起来
它的副本http://stackoverflow.com/questions/34210401/finding-the-maximum-value-of-every-row-in-2d-array -c – piyushj
在行循环中,您需要更新min和max,而不是allmin和allmax,因为min和max始终保持相同的最大和最小浮点值。然后,在内部循环之后,使用min和max中的值更新allmin和allmax。另外,请确保您在外部循环内部初始化最小值和最大值,以便它们不会与之前的列值相一致。 –
初始化第一个循环中的最小最大值:min = matrix [0] [y]; max = matrix [0] [y]; –