Поскольку двумерный массив хранит свои элементы в смежной памяти, вы можете получить как минимум, так и максимум, а также расстояние от начала массива, используя std :: minmax_element и std :: distance .
Вот небольшой пример:
#include <iostream>
#include <algorithm>
int main()
{
//initialize 2D array
int twoDimensionalArray[4][4] = {
{9, 8, 16, 7},
{11, 6, 3, 14},
{13, 4, 5, 12},
{15, 1, 2, 10}
};
// get both the minimum and maximum element in the 2D array
auto pr = std::minmax_element(&twoDimensionalArray[0][0], &twoDimensionalArray[3][4]);
// get the distances
auto dist_min = std::distance(&twoDimensionalArray[0][0], pr.first);
auto dist_max = std::distance(&twoDimensionalArray[0][0], pr.second);
std::cout << "Min Value: " << *(pr.first) << " Distance: " << dist_min << "\n";
std::cout << "Max Value: " << *(pr.second) << " Distance: " << dist_max;
}
Вывод:
Min Value: 1 Distance: 13
Max Value: 16 Distance: 2
Живой пример
Обратите внимание на использование std::minmax_element
- параметры - это, в основном, адрес первого элемента в 2D-массиве и адрес одного последнего элемента в 2D-массиве.Это дает нам диапазон для поиска и соответствует требованиям для minmax_element
относительно итераторов, которые используются для первых двух параметров.
Если матрица гарантированно будет квадратной, томы можем получить строку и столбец минимума и максимума, используя небольшую часть математики, используя модуль и деление:
#include <iostream>
#include <algorithm>
int main()
{
//initialize 2D array
int twoDimensionalArray[4][4] = {
{9, 8, 16, 7},
{11, 6, 3, 14},
{13, 4, 5, 12},
{15, 1, 2, 10}
};
auto pr = std::minmax_element(&twoDimensionalArray[0][0], &twoDimensionalArray[3][4]);
auto dist_min = std::distance(&twoDimensionalArray[0][0], pr.first);
auto dist_max = std::distance(&twoDimensionalArray[0][0], pr.second);
int row_min = dist_min / 4;
int col_min = dist_min % 4;
int row_max = dist_max / 4;
int col_max = dist_max % 4;
std::cout << "Min Value: " << *(pr.first) << "\n" << "Min Location: (" << row_min << "," << col_min << ")\n\n";
std::cout << "Max Value: " << *(pr.second) << "\n" << "Max Location: (" << row_max << "," << col_max << ")\n";
}
Вывод:
Min Value: 1
Min Location: (3,1)
Max Value: 16
Max Location: (0,2)
Так что если вы хотите использовать этоВ этом случае вам просто нужно настроить свой код так, чтобы он содержал значения индексов строк и столбцов в объявленных одномерных массивах.
Live Example