【问题标题】:Using std::max_element on a two dimensional matrix在二维矩阵上使用 std::max_element
【发布时间】:2013-09-23 09:54:01
【问题描述】:

我有一个二维矩阵

double TotalEnergy[200][47];

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

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

非常感谢。

最好的问候

金丹

【问题讨论】:

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


    【解决方案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】:

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

    【讨论】:

      【解决方案3】:

      您可以确保您使用的是指向 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]
      

      【讨论】:

        【解决方案4】:

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

        const int n = 555; // for example 
        
        int arr[n][n];
        
        // filling the array
        
        int mx = *max_element(begin(arr[0]), end(arr[n-1]));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-26
          • 2017-03-17
          • 1970-01-01
          • 2014-08-04
          • 1970-01-01
          • 1970-01-01
          • 2022-09-30
          • 1970-01-01
          相关资源
          最近更新 更多