30

我正在针对 C++ API 编写一些代码,该 API 采用向量的向量向量,并且到处编写如下代码变得乏味:

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

C++ 有向量文字语法吗?即,类似:

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

有没有一种非内置的方法来实现这一点?

4

3 回答 3

42

C++0x中,您将能够使用所需的语法:

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

但是在今天的 C++ 中,您仅限于使用boost.assign,它可以让您执行以下操作:

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

... 或使用Qt 的容器,让您一次性完成:

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

另一个半理智的选择,至少对于平面向量,是从数组构造:

string a[] = { "x", "y", "z" };
vector<string> vec(a, a + 3);
于 2009-04-16T21:26:01.440 回答
5

查看Boost 分配库

于 2009-04-16T21:26:25.993 回答
4

基本上,没有内置的语法可以做到这一点,因为 C++ 不知道向量 ether。他们只是来自一个方便的图书馆。

也就是说,如果您要加载复杂的数据结构,则无论如何都应该从文件或类似的东西中加载它;否则代码太脆弱了。

于 2009-04-16T21:28:21.840 回答