在二维矩阵上使用std :: max_element

时间:2013-09-23 09:54:02

标签: c++ visual-studio-2010 visual-c++

我有一个二维矩阵

double TotalEnergy[200][47];

此矩阵填充了适当的值。现在我试图在每列中找到最大值。

在这种情况下如何使用std::max_element

非常感谢。

最好的问候

Chintan

4 个答案:

答案 0 :(得分:1)

根据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])));
}

答案 1 :(得分:1)

将每个单独的列转换为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();
}

答案 2 :(得分:1)

您可以确保使用指向第一个和最后一个+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]

答案 3 :(得分:0)

我刚刚发现我们可以这样做:

const int n = 555; // for example 

int arr[n][n];

// filling the array

int mx = *max_element(begin(arr[0]), end(arr[n-1]));