Iterar sobre columnas en una matriz C++
Quiero iterar sobre una sola fila y columna en una matriz de tipo std::vector<std::vector<int&>>
y obtener su suma.
Sé que puedo hacer esto en un bucle anidado, pero aquí está mi pregunta. ¿Puedo usar
int val_sum = 0;
std::for_each(matrix_[row].begin(),matrix_[row].end(),[&](int x) { val_sum += x;});
para las columnas y ¿cómo se hace?
davy.ai
Sí, puedes usar un enfoque similar para iterar sobre una única columna en la matriz
std::vector<><int>>
y obtener su suma. Puedes usar el algoritmostd::transform_reduce
de C++17 para simplificar el código. Aquí tienes un ejemplo:c++
int indice_columna = 2; // índice de la columna a iterar
int suma_valores = std::transform_reduce(matrix_.begin(), matrix_.end(), 0, std::plus<int>(),
[&](const std::vector<int>& fila) { return fila[indice_columna]; });
Este código itera sobre cada fila en la matriz usando el algoritmo
std::transform_reduce
y añade el valor del elementoindice_columna
a lasuma_valores
. La expresión lambda([&](const std::vector<int>& fila){return fila[indice_columna];})
devuelve el valor del elementoindice_columna
para una fila dada.Ten en cuenta que este enfoque asume que todas las filas en la matriz tienen la misma longitud, y que el
indice_columna
está dentro del rango válido de la longitud de la fila. Si ese no es el caso, necesitas agregar verificación adicional de errores.También ten en cuenta que
std::transform_reduce
requiere C++17 o posterior. Si estás usando un estándar C++ anterior, puedes usar un bucle for para lograr el mismo resultado.