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 aclaratoria

Hay algunas buenas sugerencias para formas alternativas de representar una "matriz". Cuando uso el término "matriz" simplemente quiero decir que cada uno del segundo nivelvectorSerá 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 bucle

Hay una solución obvia para bucles, pero estaba buscando algo más robusto y eficiente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta