在二维矩阵上使用 std::max_element
Using std::max_element on a two dimensional matrix
>我有一个二维矩阵
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();
}
根据 cpp首选项std::max_elements
仅适用于迭代器。除非你想创建一个遍历二维矩阵每个元素的迭代器,否则我建议对矩阵的每一行(或列)运行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 元素的指针:
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]));
相关文章:
- 关于 std::min, std::max 中的比较运算符的混淆
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- C++是否在 std::min 和 std::max 下标准化 std::optional 的行为?
- 编译器无法推断 std::max 的重载
- 为什么 c++ 编译器在对两种不同类型的数值变量使用"std::max()"函数时会出现错误
- 执行 std::min(0.0, 1.0) 和 std::max(0.0, 1.0) 会产生未定义的行为
- 自动变量可存储函数指针到std :: max
- std :: max带有动态数组
- std :: max,但用于模板参数
- 如果std::max()通过引用返回(这是必须的),这是否会导致悬空引用
- std::max with lambda and auto
- 在c++11中,如何在向量上调用std::max
- 有没有办法防止开发人员使用std::min, std::max
- 关于std::min()和std::max()的c++可变模板版本的思考
- std::max-需要一个标识符
- 将std::max转换为Java
- 如何在不重载比较操作符的情况下为std::max专门化自定义类型