Получить первый столбец матрицы, представленной вектором векторов
Предположим, я представляю матрицу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] };
Для петлевого решенияСуществует очевидное решение для петель, но я искал что-то более надежное и эффективное.