我正在编写一些针对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", ... }, ... }, ... }
是否有非内置方式来实现这一目标?
答案 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 ++不知道向量以太;他们只是来自一个方便的图书馆。
那就是说,如果你正在加载一个复杂的数据结构,你应该从一个文件或类似的东西加载它;否则代码太脆了。