Ruft die erste Spalte einer Matrix ab, die durch einen Vektor von Vektoren dargestellt wird

Angenommen, ich repräsentiere eine Matrixfoo von Werten mitstd::vector:

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

Gibt es eine klug einfache Möglichkeit für mich, eine zu bekommen?vector<int> der Größerows das enthält die erste "spalte" von foo:

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

Anders ausgedrückt, kann ich foo "transponieren", so dass die folgenden drei Dinge zutreffen:

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] }
Erläuterung

Es gibt einige gute Vorschläge für alternative Darstellungsweisen einer "Matrix". Wenn ich den Begriff "Matrix" verwende, meine ich damit einfach die jeweils zweite Ebenevectorwird gleich groß sein. Ich möchte nicht vorschlagen, dass ich diese Datenstruktur für die lineare algebraartige Operation verwende. Ich brauche tatsächlich einen Vektor von Vektoren oder eine Datenstruktur, aus der Sie 1D-Vektoren "herausziehen" können, weil ich Funktionen habe, die Vektoren bearbeiten wie:

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

Das rufe ich durch:

sum(foo[0]);

Es ist nur ein besonderer Fall, in dem ich auf eine Situation stieß, die Folgendes zu tun hatte:

sum({foo[0][0], foo[0][1], foo[0][2], foo[0][3], foo[0][4] };
Für Loop-Lösung

Es gibt eine offensichtliche Lösung für Schleifen, aber ich suchte nach etwas Robusterem und Effizienterem.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage