es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 algoritmo std::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 elemento indice_columna a la suma_valores. La expresión lambda ([&](const std::vector<int>& fila){return fila[indice_columna];}) devuelve el valor del elemento indice_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.

Comments are closed.