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」をプッシュするにはどうすればよいですか?
これを行うことにより:
_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
を追加します。
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;
単一のオブジェクトではなく、vector<vector<t_PCB>>
の配列を作成しています。
あなたがしたいことをする正しい方法は次のとおりだと思います:
vector<vector<t_PCB>> multilevel(4);
multilevel[0].Push_back(p)
配列の代わりにベクトルを作成できます:
std::vector< std::vector<t_PCB>> multilevel(4); // 2 dim array, 1st dim is 4
そして、あなたは Push_back この方法でWHICH
でインデックス付けされたベクトルの最後に:
multilevel[WHICH].Push_back(p)
そして、それをそこに置くために、ベクトルのベクトルにアクセスするために:
multilevel[outer][inner]
ここで、outer
はそのインデックスのベクトルを返し、inner
でさらにインデックスを付けるとt_PCB
オブジェクトを返します。配列チェックを行うために、配列スタイルのインデックスを 。at() 関数に置き換えることもできます。