2013-08-10 3 views
8

क्षमा करें, मैं सी ++ में एसटीएल में नया हूं। मैं 10 वेक्टर पॉइंटर की एक सरणी कैसे शुरू कर सकता हूं जिनमें से प्रत्येक 5 int तत्वों के वेक्टर को इंगित करता है।पूर्वनिर्धारित गणना के साथ सी ++ में वेक्टर <int> की सरणी कैसे प्रारंभ करें?

vector<int>* neighbors = new vector<int>(5)[10]; // Error 

धन्यवाद

+4

'new' का उपयोग न करें। एक 'std :: array , 10> 'यदि आप आकार बदल नहीं रहे हैं और पॉइंटर्स की वास्तविक आवश्यकता के बारे में मेरे संदेह सही हैं तो आप जो पूछ रहे हैं उससे अधिक लगता है। – chris

+0

सी ++ समतुल्य 'वेक्टर > 'होगा। इसका उपयोग करने का कोई कारण नहीं है? – juanchopanza

+0

क्या आप कृपया मुझे और जानकारी दें? या एक नमूना कोड? – remo

उत्तर

17

यह एक वेक्टर 5 तत्वों के साथ 10 vector<int>, उन में से हर एक से युक्त बनाता है::

मेरे कोड स्निपेट इस प्रकार है

std::vector<std::vector<int>> v(10, std::vector<int>(5)); 

ध्यान दें कि यदि बाहरी कंटेनर का आकार तय किया गया है, आप इसके बजाय std::array का उपयोग करना चाहते हैं। ध्यान दें कि प्रारंभिकता अधिक वर्बोज़ है:

std::array<std::vector<int>, 10> v{{std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5), 
            std::vector<int>(5) 
            }}; 

यह भी ध्यान दें कि सरणी की सामग्री सरणी का हिस्सा हैं। यह आकार है, जैसा कि sizeof द्वारा दिया गया है, vector संस्करण से बड़ा है, और कोई ओ (1) चाल या स्वैप ऑपरेशन उपलब्ध नहीं है। एक std::array एक निश्चित आकार, स्वचालित भंडारण सादा सरणी के समान है।

ध्यान दें कि, जैसा कि @chris टिप्पणियों में सुझाव देता है, आप के बाद के बाद एक डिफ़ॉल्ट प्रारंभिकरण के तत्वों को सेट करना चुन सकते हैं, उदा।

std::array<std::vector<int>, 10> v; // default construction 
std::fill(v.begin(), v.end(), std::vector<int>(5)); 

अन्यथा, आप सेट/अलग-अलग तत्वों को बदल सकते हैं:

v[0] = std::vector<int>(5); // replace default constructed vector with size 5 one 
v[1].resize(42); // resize default constructed vector to 42 

और इतने पर std::fill साथ अगर वे सब कर रहे हैं एक ही मूल्य है करने के लिए।

+0

पहला आयाम std :: सरणी प्रतीत होता है (इसमें तत्वों की निरंतर संख्या है)। लेकिन, यदि यह कई कार्यों को पारित करने के लिए पर्याप्त कुशल है। (कृपया ध्यान दें कि संख्या 5 और 10 केवल सादगी के लिए हैं और वास्तव में वे 1e6 तक बढ़ सकते हैं!) – remo

+3

ईमानदारी से, मैं उस प्रारंभिकरण में 'std :: fill' पसंद करूंगा। – chris

+0

@ क्रिस सहमत हैं।मैंने इसके बारे में कुछ जोड़ा। – juanchopanza

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