2014-06-16 4 views
5

के वैक्टरों के वेक्टर को शुरू करने में समस्याएं मैं उन कोशिकाओं के साथ एक वर्गबद्ध ग्रिड उत्पन्न करने की कोशिश कर रहा हूं जिसमें आरोही संख्या है।ऑटो-इंक प्रकार

1 1 1 
2 2 2 
3 3 3 

जो मेरी अपेक्षा से अलग है::

1 2 3 
4 5 6 
7 8 9 

क्या मैं गलत कर रहा हूँ

#include <iostream> 
#include <vector> 

class Simple 
{ 
public: 
    Simple(): id(genId()) {} 
    static int genId() 
    { 
     static int g_id = 0; 
     return ++g_id; 
    } 
    int id; 
}; 

typedef std::vector< std::vector<Simple> > SimpleGrid; 

void printSimpleGrid(SimpleGrid& grid) 
{ 
    for(int i = 0; i < grid.size(); i++) { 
     for(int j = 0; j < grid[i].size(); j++) { 
      std::cout << grid[i][j].id << " "; 
     } 
     std::cout << std::endl; 
    } 
} 

int main() 
{ 
    int dim = 3; 
    SimpleGrid test(dim); 
    for (int i=0; i<dim; i++) { 
     std::vector<Simple> row(dim); 
     test[i] = row; 
    } 
    printSimpleGrid(test); 
    return 0; 
} 

मैं इस आउटपुट प्राप्त?

(मैं कोड :: ब्लाकों उपयोग कर रहा हूँ 12.11 राजस्व 8629 SDK संस्करण 1.13.14 के साथ)

+0

आप इस बारे में सुनिश्चित कर रहे हैं: कोड :: ब्लाकों 12.11 पैकेज स्पष्ट रूप से न केवल एक मानक का समर्थन करता है? क्योंकि मुझे सही परिणाम मिल रहे हैं http://coliru.stacked-crooked.com/a/ba4517515949b7db – 101010

+0

@ 40two हां, मैंने बस इसे कॉपी-पेस्ट किया है। शायद यह मेरे एसडीके संस्करण में केवल एक बग है। ... कोलिरु रिमाइंडर के लिए धन्यवाद :) – Wolf

+0

शायद क्योंकि मुझे वीसी ++ 2013 के साथ भी सही परिणाम मिल रहे हैं। – 101010

उत्तर

8

पुराने/C++ 03 compilers इस देखेंगे ...

std::vector<Simple> row(dim); 

... और निर्माता के इस अधिभार से इसका मिलान ...

explicit vector(size_type count, 
      const T& value = T(), 
      const Allocator& alloc = Allocator()); 

... दूसरा निर्माता तर्क यह है कि तब dim वेक्टर से प्रत्येक के लिए कॉपी किया जाता है के लिए एक प्रोटोटाइप Simple वस्तु बनाने तत्वों।

नई/सी इस अधिभार ++ 11 compilers बजाय मिलान कर देंगे ...

explicit vector(size_type count); 

... तो निर्माता dim बार तत्वों को बनाने के आह्वान करने के लिए आगे बढ़ें।

विवरण here

+0

+1 (एसीसी) को स्पष्ट करने के लिए धन्यवाद। – Wolf

1

Tony D's great answer के अलावा, यहां मेरी खुश अंत इस प्रकार है। आईडीई सेटिंग्स में, मैंने कंपाइलर के लिए सी ++ 11 अनुपालन सक्षम किया।

enter image description here

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