2013-07-15 7 views
44

तो शुरु कर रहा है, मैं निम्नलिखित है:जो दो आयामी std :: वेक्टर

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

और मैं इसे आरंभ कर रहा हूँ बहुत भोलेपन से पसंद:

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); 
    } 

और यह बहुत गलत लगता है ... है इस तरह एक वेक्टर शुरू करने का एक और तरीका है?

+1

यदि आप 'std :: vector :: max_size()' से अधिक स्थान की आवश्यकता नहीं है, तो मैं 2 डी वेक्टर के लिए 1 डी वेक्टर कार्यान्वयन की अनुशंसा करता हूं। [यहां] (http://stackoverflow.com/a/13937325/942596) – andre

उत्तर

93

std::vector::vector(count, value) निर्माता है कि एक प्रारंभिक आकार और एक डिफ़ॉल्ट मान स्वीकार करता है का उपयोग करें:

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

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

एक मूल्य के अन्य शून्य कहते हैं, उदाहरण के लिए 4 है, तो डिफ़ॉल्ट होना करने की जरूरत पड़ी

मुझे यह भी उल्लेख करना चाहिए कि सी ++ 11 में वर्दी प्रारंभिकरण पेश किया गया है, जो vector, और अन्य कंटेनर की शुरुआत को {}:

का उपयोग करने की अनुमति देता है
std::vector<std::vector<int> > fog { { 1, 1, 1 }, 
            { 2, 2, 2 } }; 
23

std::vector में कोई append विधि नहीं है, लेकिन आप एक वेक्टर int की A_NUMBER वैक्टर युक्त बनाने के लिए चाहते हैं, other_number शून्य से युक्त उन लोगों में से प्रत्येक, तो आप ऐसा कर सकते हैं:

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

संलग्न करने के बारे में: बस एक टाइपो :) धन्यवाद! – fritzone

+0

यह हमारे लिए काम करता है, – mxi1

0

सामान्य वाक्य रचना, के रूप में पहले से ही दिखाया गया है:

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

यहाँ, वेक्टर 'वी' के साथ, एक दो आयामी सरणी के रूप में देखे जा सकते हैं पंक्तियों का 'A_NUMBER', उनके प्रारंभिक मान वाले 'OTHER_NUMBER' स्तंभों के साथ 'DEFAULT_VALUE' पर सेट किया गया है।

यह भी इस तरह लिखा जा सकता है:

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

उदाहरण पहले से ही किया गया है: 2-डी वेक्टर में

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

इनपुट करने मूल्यों 2-डी सरणी में मानों inputting के समान है अन्य उत्तरों में कहा ....!

संबंधित मुद्दे