我有一个二维矩阵
double TotalEnergy[200][47];
该矩阵填充了适当的值。现在我试图在每一列中找到最大值。
在这种情况下我该如何使用std::max_element
?
非常感谢。
此致
钦坦
我有一个二维矩阵
double TotalEnergy[200][47];
该矩阵填充了适当的值。现在我试图在每一列中找到最大值。
在这种情况下我该如何使用std::max_element
?
非常感谢。
此致
钦坦
根据cppreference std::max_elements
仅适用于迭代器。除非您想创建一个遍历 2D 矩阵的每个元素的迭代器,否则我建议对矩阵std::max_element
的每一行(或每一列)运行。
示例(未经测试)代码:
double result{std::numeric_limits<double>::min()};
for(int iX{0}; iX < 200; ++iX) {
result = std::max(result, std::max_element(std::begin(TotalEnergy[iX]),
std::end(TotalEnergy[iX])));
}
将每个单独的列转换为 std::vector 并在向量上使用 std::max_element 函数。STL 容器非常有效地处理所有内存问题,我们无需担心。
double maxElements[47]; //This will contain the max of each column of TotalEnergy
std::vector<double> vec;
for(int k=0; k<47; k++)
{
for(int l=0; l<200;l++)
vec.push_back(TotalEnergy[l][k]);
maxElements[k] = *std::max_element(vec.begin() , vec.end());
vec.clear();
}
您可以确保使用指向 first 和 last+1 元素的指针:
double distBetweenNodes[N][N];
const double maxDist = *std::max_element(&distBetweenNodes[0][0], &distBetweenNodes[0][0]+N*N);
// Note that &distBetweenNodes[0][0]+P*N could be &distBetweenNodes[N][N]
我刚刚发现我们可以这样做:
const int n = 555; // for example
int arr[n][n];
// filling the array
int mx = *max_element(begin(arr[0]), end(arr[n-1]));