Frage

Ich schreibe einige Code gegen eine C ++ API, die Vektoren von Vektoren von Vektoren nimmt, und es wird immer langweilig Code wie folgt aus der ganzen Ort zu schreiben:

vector<string> vs1;
vs1.push_back("x");
vs1.push_back("y");
...
vector<string> vs2;
...
vector<vector<string> > vvs1;
vvs1.push_back(vs1);
vvs1.push_back(vs2);
...
vector<vector<string> > vvs2;
...
vector<vector<vector<string> > > vvvs;
vvvs.push_back(vvs1);
vvvs.push_back(vvs2);
...

Hat C ++ eine Vektor Literalsyntax? Das heißt, so etwas wie:

vector<vector<vector<string>>> vvvs = 
    { { {"x","y", ... }, ... }, ... }

Gibt es einen nicht-builtin Weg dies zu tun?

War es hilfreich?

Lösung

C ++ 0x wird in der Lage sein die gewünschte Syntax:

vector<vector<vector<string> > > vvvs = 
    { { {"x","y", ... }, ... }, ... };

Aber in der heutigen C ++ Sie mit Schub begrenzt .assign , die können Sie tun:

vector<string> vs1;
vs1 += "x", "y", ...;
vector<string> vs2;
...
vector<vector<string> > vvs1;
vvs1 += vs1, vs2, ...;
vector<vector<string> > vvs2;
...
vector<vector<vector<string> > > vvvs;
vvvs += vvs1, vvs2, ...;

... oder mit Qt-Container , die Sie es in einem zu tun lassen gehen:

QVector<QVector<QVector<string> > > vvvs =
    QVector<QVector<QVector<string> > >() << (
        QVector<QVector<string> >() << (
            QVector<string>() << "x", "y", ...) <<
            ... ) <<
        ...
    ;

Die andere Halb vernünftige Möglichkeit, zumindest für flache Vektoren wird von einer Anordnung zu konstruieren:

string a[] = { "x", "y", "z" };
vector<string> vec(a, a + 3);

Andere Tipps

Schauen Sie sich Boost-Bibliothek zuweisen.

Im Grunde genommen gibt es keine eingebaute Syntax, es zu tun, weil C ++ nicht über Vektoren Äther nicht kennt; sie sind nur von einer günstigen Bibliothek.

Das heißt, wenn Sie das Laden einer komplizierten Datenstruktur, sollten Sie es aus einer Datei oder etwas ähnliches ohnehin laden; der Code ist sonst zu spröde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top