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äuterungEs gibt einige gute Vorschläge für alternative Darstellungsweisen einer "Matrix". Wenn ich den Begriff "Matrix" verwende, meine ich damit einfach die jeweils zweite Ebenevector
wird 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ösungEs gibt eine offensichtliche Lösung für Schleifen, aber ich suchte nach etwas Robusterem und Effizienterem.