Question

J'écris un code contre une API C ++ qui prend des vecteurs de vecteurs de vecteurs, et il devient fastidieux d'écrire du code comme ce qui suit dans tous les sens:

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);
...

Ne C ++ un vecteur syntaxe littérale? À savoir, quelque chose comme:

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

Est-il possible d'y arriver? Non-builtin

Était-ce utile?

La solution

C ++ 0x seront en mesure utiliser votre syntaxe désirée:

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

Mais dans C ++ d'aujourd'hui vous êtes limité à l'aide de boost .assign qui vous permet de faire:

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, ...;

... ou en utilisant les conteneurs de Qt qui vous permettent de le faire dans un aller:

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

L'autre option semi-sane, au moins pour les vecteurs plats, est de construire à partir d'un tableau:

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

Autres conseils

En fait, il n'y a pas intégré dans la syntaxe pour le faire, parce que C ++ ne connaît pas l'éther de vecteurs; ils sont juste d'une bibliothèque pratique.

Cela dit, si vous chargez une structure de données complexe, vous devez le charger à partir d'un fichier ou quelque chose de semblable de toute façon; le code est trop fragile autrement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top