2013-04-05 24 views
15

C++ 'da çok düzeyli bir sıra işlem simülatörü tasarlıyorum ama birkaç sıra (benim kuyruklarım vektörler) uygulamaya çalışırken bir sorunum var. Evet, "çok düzeyli" bir 4 öge dizisidir (vektör değil). Bu elemanların her birinde bir vektör var (tip t_PCB).vektörel vektörler push_back

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

Sorum şu: Nasıl biri bu 4 t_PCB vektörler sonunda bir öğe ekleyebilirsiniz? Şimdiden teşekkür ederim.

aşağıda kod satırı denedim ama (hata: aramalarının 'push_back' için eşleşmeyen üye işlev) çalışmıyor konuşurken

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

yukarıdan çizgi kullanılamaz "çok düzeyli" hakkında bu dizilim yalnızca bağımsız değişkenleri kabul ettiğinden dolayı: vektör < t_PCB>

Baştan sorduğum gibi: "çok düzeyli" içindeki "t_PCB" nesne türünü nasıl ittirebilirim?

+0

çok seviyeli bir "4 elemanları vektörü", ancak t_PCB – Paranaix

cevap

16

Bunu yaparak:

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

Bir dizi dört sıfır boyutlu vectors ait, beyan her biri vector<t_PCB> türünde nesneler içerebilir. Ne muhtemelen yapmak istediği ziyade geçerli:

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

Bu tip vector<t_PCB> dört varsayılan başlatıldı nesnelerin bir vektör örneğini. Ardından, tıpkı yapabilirsiniz:

multilevel[size].push_back(p); 

Bildirim olsa da, (dizi endeksleri gibi) o vektör endeksleri sıfır tabanlı, bu yüzden size vektör boyutundan daha küçük olmalıdır. Yukarıdaki ifadede

, alt-ifade multilevel[size] multilevel içinde size inci dizisine bir referans verir ve bu vektör üzerindeki daha sonra buna elemanı p ekler üye işlev push_back(p), yürütmesini edilir.

Dizinin yerine bir vektör oluşturabilirsiniz
+0

bu kod vektörlerini içeren bir vektörün bir dizi değil -> düzeyli [boyut] .push_back (s); sadece çok düzeyli aşağıdaki gibi bildirilmişse çalışır; vektör çok düzeyli [4]; – karl71

+0

Açıkçası bu satırı kodumda kullanırsam bir hata alıyorum – karl71

+0

@ jafm92 Dikkatle bakın. '[4]' i '(4)' olarak değiştirmelisiniz. Vektörlerin bir dizi vektörünü ilan ediyordunuz. Andy, sadece vektörlerin bir vektörünü nasıl beyan edeceğinizi gösteriyor. Öte yandan, vektör çok seviyeli [4] 'vektörlerin bir dizisidir. Hangisini istediğine karar vermelisin. –

4

Tek bir nesne yerine vector<vector<t_PCB>> bir dizi oluşturuyorsunuz.

Ne istediğini yapmak doğru yol olduğunu düşünüyorum:

vector<vector<t_PCB>> multilevel(4); 
multilevel[0].push_back(p) 
2

:

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

ve sonra WHICH ile bu şekilde endeksli vektör sonunda push_back yapabilirsiniz:

multilevel[WHICH].push_back(p) 
16

iki boyutlu vektör bildirilmesi olduğunu bir dizi bildirmeye benzer. Aynı şekilde kullanabilirsiniz ...outerinner o indeks ve daha fazla endeksleme de vektör dönecektir

multilevel[outer][inner] 

t_PCB nesneyi döndürür:

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; 
0

Ve sadece orada söndürmeye, vektörlerin vektörü erişmek için. Ayrıca, dizi stili dizinlemeyi sınır denetimleri için .at() işleviyle de değiştirebilirsiniz.

-1
vector<vector<int>> vec; // declare 2D vector 

    for (int i=0; i<=3; i++) { 
     vector<int> row; // create a row vector which adds a row to vec 
     for (int j=0; j<=4; j++) { 
      row.push_back(j*10); // push elements 0,10,20,30,40 to row 
     } 
     vec.push_back(row); // add this row to vec 
     // Repeat this procedure 4 times to make a 4*5 2D vector 
    } 

    cout<<"output is "<<vec[2][4]; // output is 40 
İlgili konular