C ++矢量文字,或类似的东西

时间:2009-04-16 21:24:43

标签: c++ vector literals

我正在编写一些针对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", ... }, ... }, ... }

是否有非内置方式来实现这一目标?

3 个答案:

答案 0 :(得分:37)

C++0x will be able {{}}}中使用您想要的语法:

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's containers让您一次性完成:

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

答案 1 :(得分:5)

答案 2 :(得分:4)

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

那就是说,如果你正在加载一个复杂的数据结构,你应该从一个文件或类似的东西加载它;否则代码太脆了。