Obtén la primera columna de una matriz representada por un vector de vectores.
Supongamos que estoy representando una matrizfoo
de valores usandostd::vector
:
int rows = 5;
int cols = 10;
auto foo = vector<vector<double>>(rows, vector<double>(cols));
¿Hay una manera ingeniosa y simple de obtener unvector<int>
de tamañorows
que contiene la primera "columna" de foo:
{foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] }
Dicho de otra manera, ¿puedo "transponer" foo para que las siguientes tres cosas sean ciertas?
foo_transpose.size() == cols
foo_transpose[0].size() == rows
foo_transpose[0] == {foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] }
Nota aclaratoriaHay algunas buenas sugerencias para formas alternativas de representar una "matriz". Cuando uso el término "matriz" simplemente quiero decir que cada uno del segundo nivelvector
Será del mismo tamaño. No pretendo sugerir que usaré esta estructura de datos para operaciones de tipo de álgebra lineal. En realidad, SÍ necesito un vector de vectores, o una estructura de datos desde la cual pueda "extraer" vectores 1D, porque tengo funciones que operan en vectores como:
double sum(vector<double> const & v);
Que llamo por:
sum(foo[0]);
Es solo en un caso especial que llegué a una situación que debo hacer:
sum({foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] };
Para la solución de bucleHay una solución obvia para bucles, pero estaba buscando algo más robusto y eficiente.