2013-07-15 32 views
44

başlatılıyor, aşağıdakileri sorunum: ... Isiki boyutlu std :: Yani vektör

for(int i=0; i<A_NUMBER; i++) 
    { 
      std::vector <int> fogRow; 
      for(int j=0; j<OTHER_NUMBER; j++) 
      { 
       fogRow.push_back(0); 
      } 
      fog.push_back(fogRow); 
    } 

Ve çok yanlış geliyor:

std::vector< std::vector <int> > fog; 

ve bunu başlatılıyor am çok safça gibi Böyle bir vektörün başlatılmasının başka bir yolu var mı?

+1

bir 2d vektör için 1d vektör uygulamasını öneriyoruz. [Burada] (http://stackoverflow.com/a/13937325/942596), ekleme yapılması hakkında – andre

cevap

93

bir başlangıç ​​büyüklüğü ve varsayılan bir değer kabul std::vector::vector(count, value) kurucu kullanın:

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER, 4)); 
: bir değer diğer sıfır, örneğin 4 dersek

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value 

, varsayılan olması gerekirdi

Ayrıca homojen başlatma söz gerekmektedir vector başlatılması izin C++ 11, ve diğer kaplar, {} kullanarak sokulur:

std::vector<std::vector<int> > fog { { 1, 1, 1 }, 
            { 2, 2, 2 } }; 
23

std::vector hiçbir append yöntemi yoktur, ancak int ait A_NUMBER vektörleri içeren bir vektör yapmak istiyorsanız, other_number sıfır içerenler her, o zaman bunu yapabilirsiniz:

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER)); 
+0

: sadece bir yazım hatası :) teşekkürler! – fritzone

+0

Bizim için çalışıyor, – mxi1

0

genel daha önce gösterildiği gibi söz dizimi, şudur: Burada

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE)) 

vektör 'v' ile, bir iki boyutlu dizi olarak görselleştirilebilir 'DEFAULT_VALUE' ayarlanmış başlangıçtaki değeri ile sütun 'OTHER_NUMBER' ile satır 'A_NUMBER',.

da böyle yazılabilir:

for(int i = 0; i < A_NUMBER; i++) { 
    for(int j = 0; j < OTHER_NUMBER; j++) { 
     std::cin >> v[i][j] 
    } 
} 

örnekler daha önce olmuştur:

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE) 
std::vector<std::vector<int> > v(A_NUMBER, line) 

girilen değerleri 2-B vektörde bir 2-boyutlu dizi değerleri giren benzer diğer cevaplarda belirtildi ....! Eğer `std :: vector :: MAX_SIZE()` den fazla alana ihtiyaç yoksa