2009-04-16 10 views
22

私はC++のベクトルのベクトルのベクトルを取るAPIに対していくつかのコードを書いて、それはすべての場所で、次のようなコードを書くことが面倒になっています:C++ベクトルリテラル、またはそれらのようなもの

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", ... }, ... }, ... } 

これを行うための組み込み方法はありませんか? C++0x

+1

私の悪い括弧を捕まえた人はいません! –

+1

私はあなたの括弧をキャッチしていないかもしれませんが、間違った変数名とセミコロンがないことを確かめました! ;) –

+0

ほぼですが、かなりです... –

答えて

34

あなたwill be ableご希望の構文を使用する:

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

しかし、あなたはあなたが行うことができますどのboost.assignを使用することに限定されている++今日のCで:

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

は、少なくとも平坦ベクターに、配列から構築する他の半健全なオプションである:

+3

litbが投稿したものと同じように、配列サイズを自動取得する方法をお勧めします:http://stackoverflow.com/questions/437150/can-someone-explainこのテンプレートコードは配列のサイズを与えます –

+2

確かにそうです。 Didntは答えを複雑にしたい。 –

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

チェックアウトBoost assign library

3

基本的には、C++はベクターのエーテルについて知らないので、組み込みの構文はありません。彼らは便利な図書館からのものです。あなたが複雑なデータ構造を読み込んでいる場合は、ファイルなどからロードする必要があります。そうでなければコードは脆弱です。

+0

このような構造体はハードコーディングされていないだけでなく、そのようなネストされたベクトルが直接操作されているという事実は、コードの臭いであると思います...その一部または全部をカプセル化するクラスがあるはずです。 – rmeador

+1

STLは_convenient_ライブラリではなく、**標準**ライブラリです。 C++はレイヤーで構築されていますが、それはピースが真空状態で構築されているわけではありません。 –

+1

あなたはそうです、私はSTLを見つけるのに便利なライブラリはありません。 –

関連する問題