2011-01-11 19 views
6

प्रत्येक तत्व के माध्यम से पुन: प्रयास किए बिना, मैं नया उपयोग करके सरणी कैसे बना सकता हूं और प्रत्येक तत्व को एक निश्चित मान में प्रारंभ कर सकता हूं?मैं नए का उपयोग करके सी ++ में सरणी कैसे बना सकता हूं और प्रत्येक तत्व को आरंभ कर सकता हूं?

bool* a = new bool[100000]; 

वी.एस. 2008 का उपयोग करना

धन्यवाद!

उत्तर

12

उस मामले में, केवल मूल्य इसे सेट के साथ false है:

bool* a = new bool[100000](); 

जिसके अनुसार, मुझे यकीन है कि तुम क्यों लगता है कि आप एक पाश उपयोग नहीं कर सकते नहीं कर रहा हूँ। वे एक कारण के लिए हैं। आपको केवल तैयार किए गए फ़ंक्शन fill या fill_n (स्वाद के आधार पर) का उपयोग करना चाहिए।


new का उपयोग करते हुए नोट "कच्चे" जैसे भयानक प्रोग्रामिंग अभ्यास है। का प्रयोग करें एक std::vector<bool> *:

std::vector<bool> v; 

v.resize(100000); 
std::fill(v.begin(), v.end(), true); // or false 

या:

std::vector<bool> v; 

v.reserve(100000); 
std::fill_n(std::back_inserter(v), 100000, true); // or false 

* बेशक, std::vector<bool> उचित कंटेनर इंटरफ़ेस तोड़ने के लिए तो वास्तव में bool की दुकान नहीं है होता है। यदि यह समस्या है तो इसके बजाय std::vector<char> का उपयोग करें।

+0

मैं एक सदिश उपयोग कर रहा था क्या कर सकते हैं, लेकिन यह बहुत धीमी थी। तो मैं एक तेज समाधान की तलाश में हूं। लेकिन मैंने भरने का उपयोग नहीं किया, इसलिए मुझे लगता है कि यह तेज़ हो सकता है। –

+0

@BSeven: मुझे गंभीरता से संदेह है कि आपका दावा सत्य है और आप ऐसी स्थिति में हैं जहां वैसे भी इससे कोई फर्क नहीं पड़ता। 'Std :: vector' का उपयोग करें, यह आपके लिए प्रबंधन को संभालता है ताकि आपको आसानी से लीक से बचा न जाए। क्या आपने अपना पूरी तरह से पूरा रिलीज-बिल्ड एप्लिकेशन प्रोफाइल किया है और पाया है कि 'std :: vector' का उपयोग करके सुझाए गए परिणाम आपके आवेदन का सबसे धीमा हिस्सा था? (संख्या) – GManNickG

+0

@ सीबीवेन: किस बिंदु पर वेक्टर इतनी धीमी थी? रिलीज संकलन में, यदि सही तरीके से उपयोग किया जाता है तो यह कच्चे सरणी के रूप में तेज़ होना चाहिए। – Philipp

14

क्या GMAN ऊपर कहा के अलावा, मेरा मानना ​​है कि आप इस तरह से निर्माण पर अपने वेक्टर में प्रत्येक मान के लिए एक प्रारंभिक मूल्य निर्दिष्ट कर सकते हैं ..

vector<bool> a (100000, true); 
+1

+1 डुह मेरे हिस्से पर, बहुत आसान है। :) – GManNickG

2

आप वेक्टर दृष्टिकोण को प्राथमिकता देनी चाहिए, लेकिन आप भी कर सकते हैं मेमसेट का प्रयोग करें।

1

तो 0 is false और 1 is true माना जाता है - आप

bool* a = new bool[100]; 
std::fill_n(a, 100, 1); // all bool array elements set to true 
std::fill_n(a, 100, 0); // all bool array elements set to false 
संबंधित मुद्दे

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