2009-07-16 12 views
2

ポインタを含むベクトルを作成しようとしています。各ポインターは、構造体を使用して作成したCellの別のベクトルを指しています。 以下のforループを使用すると、ポインターのベクトルに含まれる要素の数をユーザーが定義できるようになります。より多くのベクトルを指すポインターのベクトルを作成する

vector< vector<Cell>* > vEstore(selection); 
for (int t=0; t<selection; t++) 
{ 
    vEstore[t] = new vector<Cell>; 
    vEstore[t]->reserve(1000); 
} 

これは、私が思うに、私のタイプCellのデスティネーションベクターへのポインタのベクトルを与える:ここに私のコードです。 これはコンパイルされますが、現在は宛先のベクターにpush_backを送信しようとしていますが、その方法はわかりません。

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 
}; 

I 2つの値とする方法push_backこのデスティネーションベクターにうまくできません。

デスティネーションベクターは、以下のように型から作られる型セルであるので

?私は、これは先の配列の値を明らかに binpocket[1]にポインタデリファレンスし、順番に各要素に対処するだろうと思ったよう

binpocket[1]->lr1.push_back(10); 
binpocket[1]->cw2.push_back(12); 

私が考えていました...。 しかし、コンパイルされません。

誰でも助けることができます ...これは1つの値しか持たず、とにかくコンパイルされません。

答えて

7
Cell cell = { 10, 12 }; 
binpocket[1]->push_back(cell); 

また、構造体にコンストラクタを付けることもできます。

struct Cell 
{ 
    Cell() {} 
    Cell(unsigned long long lr1, unsigned int cw2) 
     : lr1(lr1), cw2(cw2) 
    { 
    } 

    unsigned long long lr1; 
    unsigned int cw2; 
}; 

次に、あなたはlong longは、非標準(まだ)ですが、一般的に受け入れられている拡張機能であることを

binpocket[1]->push_back(Cell(10, 12)); 

注意を行うことができます。

+0

ありがとうございました – Columbo

+0

これはおそらく本当に愚かな質問ですが、なぜ空になったら2回コンストラクタを持っていますか? – Columbo

+0

コンストラクタを指定しない場合、コンパイラは空のデフォルト(つまりパラメータなし)のコンストラクタを作成します。つまり、あなたは '細胞細胞 'を行うことができます。カスタムコンストラクタを提供することによって、コンパイラはデフォルトコンストラクタを作成しません。だから私はそれを提供した。もしあなたが '細胞細胞 'をしたくなければ、それをする必要はありません。 – avakar

3

があなたのセルコンストラクタを与える:ところで

binpocket[1]->push_back(Cell(10, 12)); 

、それは長い長い標準C++ではありません注意してください。

struct Cell 
{ 
    unsigned long long lr1; 
    unsigned int cw2; 

    Cell(long long lv, int iv) : lr1(lv), cw2(iv) {} 
}; 

をあなたは今のようなものを言うことができます。

関連する問題