सूक्ष्म-आशावादी लोगों के लिए प्रस्तावना
याद है:
"प्रोग्रामर अपने कार्यक्रमों के गैर-राजनीतिक भागों की गति के बारे में सोचने या चिंता करने में बहुत समय बर्बाद करते हैं, और दक्षता पर इन प्रयासों का वास्तव में एक मजबूत नकारात्मक प्रभाव पड़ता है जब डिबगिंग और रखरखाव पर विचार किया जाता है। हमें छोटी क्षमता के बारे में भूलना चाहिए, इस बारे में कहना चाहिए। समय का 97%: समयपूर्व अनुकूलन सभी बुराई की जड़ है। फिर भी हमें उस महत्वपूर्ण 3% में अपने अवसरों को पारित नहीं करना चाहिए।
( पूर्ण उद्धरण के लिए कायापलट के लिए धन्यवाद )
एक वेक्टर (या जो भी) के बजाय एक सी सरणी का उपयोग न करें क्योंकि आप मानते हैं कि यह तेज़ है क्योंकि यह निचले स्तर का माना जाता है। आप गलत होंगे।
डिफ़ॉल्ट वेक्टर (या आपकी ज़रूरत के अनुसार सुरक्षित कंटेनर) का उपयोग करें, और फिर यदि आपका प्रोफाइलर कहता है कि यह एक समस्या है, तो देखें कि क्या आप इसे बेहतर एल्गोरिथ्म का उपयोग करके, या कंटेनर बदलकर कर सकते हैं।
इसने कहा, हम मूल प्रश्न पर वापस जा सकते हैं।
स्थिर / गतिशील सरणी?
C ++ सरणी वर्ग को निम्न-स्तरीय C सरणी से बेहतर व्यवहार किया जाता है क्योंकि वे अपने बारे में बहुत कुछ जानते हैं, और उन प्रश्नों का उत्तर दे सकते हैं जो C सरणियाँ नहीं कर सकती हैं। वे खुद के बाद साफ करने में सक्षम हैं। और अधिक महत्वपूर्ण बात, वे आमतौर पर टेम्प्लेट और / या इनलाइनिंग का उपयोग करके लिखे जाते हैं, जिसका अर्थ है कि डिबग में बहुत सारे कोड दिखाई देते हैं जो रिलीज बिल्ड में कम या कोई कोड नहीं होता है, जिसका अर्थ है कि उनके अंतर्निहित कम सुरक्षित प्रतिस्पर्धा से कोई अंतर नहीं है।
सभी में, यह दो श्रेणियों पर पड़ता है:
गतिशील सरणियाँ
एक मॉलॉक-एड / न्यू-एड सरणी के लिए एक पॉइंटर का उपयोग करना सबसे अच्छा होगा जितनी तेजी से स्टैड :: वेक्टर संस्करण, और बहुत कम सुरक्षित ( लिटब के पोस्ट देखें )।
तो एक std :: वेक्टर का उपयोग करें।
स्थैतिक सरणियाँ
एक स्थिर सरणी का उपयोग करना सबसे अच्छा होगा:
- जितनी तेजी से std :: सरणी संस्करण
- और बहुत कम सुरक्षित है।
इसलिए एक std :: array का इस्तेमाल करें ।
अनधिकृत स्मृति
vector
कच्चे बफर के बजाय कभी-कभी एक दृश्यमान लागत का उपयोग किया जाता है, क्योंकि vector
निर्माण में बफर को इनिशियलाइज़ करेगा, जबकि कोड ने इसे प्रतिस्थापित नहीं किया, जैसा कि उसके जवाब में बर्नी ने कहा था ।
यदि यह मामला है, तो आप इसे या के unique_ptr
बजाय का उपयोग करके इसे संभाल सकते हैं vector
, यदि मामला आपके कोडलाइन में असाधारण नहीं है, तो वास्तव में एक वर्ग लिखें जो buffer_owner
उस मेमोरी का मालिक होगा, और आपको इसे आसान और सुरक्षित एक्सेस प्रदान करेगा, जिसमें शामिल हैं बोनस का आकार बदलना (उपयोग करना realloc
?), या जो भी आपको चाहिए।