web-dev-qa-db-ja.com

ベクトルのベクトルPush_back

C++でマルチレベルキュープロセスシミュレータを設計していますが、複数のキュー(私のキューはベクトルです)を実装しようとすると問題が発生します。したがって、「マルチレベル」は4要素配列(ベクトルではありません)です。これらの各要素の中には、ベクター(t_PCB型)があります。

vector<vector<t_PCB>> multilevel[4];

私の質問は次のとおりです。これら4つのt_PCBベクトル?前もって感謝します。

以下のコード行を試しましたが、機能しません(error:呼び出し 'Push_back'のメンバー関数が一致しません)

multilevel[0].Push_back(p); //where "p" is a t_PCB object

この配列は引数の型のみを受け入れるため、「マルチレベル」について話すときには、上記の行は使用できません。vector <t_PCB>

だから、最初に尋ねたように、「マルチレベル」の中にオブジェクトタイプ「t_PCB」をプッシュするにはどうすればよいですか?

21
karl71

これを行うことにより:

_vector<vector<t_PCB> > multilevel[4];
_

4つのゼロサイズvectorsの-​​arrayを宣言します。それぞれに_vector<t_PCB>_型のオブジェクトを含めることができます。あなたがおそらくやりたいことはむしろ:

_vector<vector<t_PCB> > multilevel(4);
//                               ^^^
_

これは、タイプ_vector<t_PCB>_の4つのデフォルトで初期化されたオブジェクトのベクトルをインスタンス化します。その後、あなたはちょうどすることができます:

_multilevel[size].Push_back(p);
_

ただし、配列インデックスなどのベクトルインデックスはゼロベースであるため、sizeはベクトルのサイズよりも小さくなければなりません。

上記の式では、部分式_multilevel[size]_はsize内のmultilevel- thベクトルへの参照を返し、そのベクトルでメンバー関数Push_back(p)、要素pを追加します。

23
Andy Prowl

2次元ベクトルの宣言は、配列の宣言に似ています。同じように使用することもできます...

vector<vector<int> > vec;

for(int i = 0; i < 5; i++)
{
    vector<int> row;
    vec.Push_back(row);
}

vec[0].Push_back(5);
cout << vec[0][0] << endl;
19
p.j

単一のオブジェクトではなく、vector<vector<t_PCB>>の配列を作成しています。

あなたがしたいことをする正しい方法は次のとおりだと思います:

vector<vector<t_PCB>> multilevel(4);
multilevel[0].Push_back(p)
4
Hugo Corrá

配列の代わりにベクトルを作成できます:

std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4

そして、あなたは Push_back この方法でWHICHでインデックス付けされたベクトルの最後に:

multilevel[WHICH].Push_back(p)
2
4pie0

そして、それをそこに置くために、ベクトルのベクトルにアクセスするために:

multilevel[outer][inner]

ここで、outerはそのインデックスのベクトルを返し、innerでさらにインデックスを付けるとt_PCBオブジェクトを返します。配列チェックを行うために、配列スタイルのインデックスを 。at() 関数に置き換えることもできます。

0
gitfredy