2016-03-27 32 views
1

ben iki boyutlu vektör aşağıdaki beyanı bulunur:iki boyutlu vektör numarayı takamıyorum

tableT[0].push_back(1); 

Bu ölümcül sonuçlanır:

vector< vector<int> > tableT; 

ben üzerinden bir sayı eklemek için denemek hata. Yapabileceğiniz önce

Ben tüm ilgili kitaplıkları kullanmak

ve using namespace std

+0

Muhtemelen 'tableT 'sınırlarına erişmiyorsunuz. Ama bir [kayıt] vermelisin. – juanchopanza

cevap

1

:

tableT.push_back(vector<int>()); 

Örnek:

tableT.push_back(vector<int>()); 
tableT[0].push_back(1); 

bu size verecektir:

tableT[0].push_back(1); yapmanız gerekenler
{ 
    {1} 
} 

Eğer tableT[0] tekrar push_back eğer: Eğer Bir satırı daha eklemek istiyorsanız

{ 
    {1, 1} 
} 

, sen tableT tekrar push_back gerekir:

tableT[0].push_back(1); 

sahip olacak

tableT.push_back(vector<int>()); 

ve sonra:

tableT[1].push_back(3); // or tableT.back().push_back(3); 

ve şimdi var:

{ 
    {1, 1}, 
    {3} 
} 
+0

@ DimChtz- çalışıyor. Neden bunu yapmak zorundayım? – sara8

+0

@ sara8 Açıklamama izin ver ve açıkla – DimChtz

+0

@ sara8: Çünkü 2D vektörü diye bir şey yok. Sahip olduğunuz şey vektörlerin bir vektörüdür. Vektörler vektörünüzde herhangi bir vektörünüz yoksa, o zaman onlara geri itemezsiniz: P yani 'tableT [0]' henüz değil, 'tableT [0] [0] 'gibi henüz yok. –

0

Alternatif: Zaten 2D vector boyutlarını biliyorsanız,

vector< vector<int> > tableT(number_of_rows, vector<int>(number_of_columns)); 

dikdörtgen matris oluşturmak hepsi vector s ve depolama size tahsis edecek gerekir. Örneğin,

vector< vector<int> > tableT(24, vector<int>(120000)); 

int tableT[24][120000]; 

benzer bir şey yapacak ama gerçekte 24 vector s biri vector ve 120000 int s 24 vector s. vector s vector s performans sorunları var, ancak OP hiçbiri endişelenmenize gerek yok.