1

私は二次元行列を持っています

double TotalEnergy[200][47];

このマトリックスには、適切な値が取り込まれます。今、各列の最大値を見つけようとしています。

std::max_elementこの場合、どのように使用すればよいですか?

どうもありがとう。

よろしくお願いします

ちんたん

4

4 に答える 4

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();
}
于 2013-09-23T12:38:23.027 に答える
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])));
}
于 2013-09-23T09:56:59.027 に答える
1

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]
于 2018-10-25T08:43:42.707 に答える