私は二次元行列を持っています
double TotalEnergy[200][47];
このマトリックスには、適切な値が取り込まれます。今、各列の最大値を見つけようとしています。
std::max_element
この場合、どのように使用すればよいですか?
どうもありがとう。
よろしくお願いします
ちんたん
私は二次元行列を持っています
double TotalEnergy[200][47];
このマトリックスには、適切な値が取り込まれます。今、各列の最大値を見つけようとしています。
std::max_element
この場合、どのように使用すればよいですか?
どうもありがとう。
よろしくお願いします
ちんたん
個々の列をそれぞれ 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();
}
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])));
}
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]