Получить первый столбец матрицы, представленной вектором векторов

Предположим, я представляю матрицуfoo значений с использованиемstd::vector:

int rows = 5;
int cols = 10;    
auto foo = vector<vector<double>>(rows, vector<double>(cols));

Есть ли для меня умно простой способ получитьvector<int> размераrows который содержит первый «столбец» foo:

{foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] }

Другими словами, могу ли я "транспонировать" foo так, чтобы выполнялись следующие три вещи:

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] }
Пояснительная записка

Есть несколько хороших предложений по альтернативным способам представления «матрицы». Когда я использую термин «матрица», я просто имею в виду, что каждый второй уровеньvectorбудет такого же размера. Я не имею в виду, что я буду использовать эту структуру данных для операций типа линейной алгебры. Мне действительно нужен вектор векторов или структура данных, из которой вы можете «вытащить» одномерные векторы, потому что у меня есть функции, которые работают с такими векторами, как:

double sum(vector<double> const & v);

Это я называю по:

sum(foo[0]);

Это просто в особом случае я столкнулся с ситуацией, которую нужно сделать:

sum({foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] };
Для петлевого решения

Существует очевидное решение для петель, но я искал что-то более надежное и эффективное.

Ответы на вопрос(1)

Ваш ответ на вопрос