2017-04-24 5 views
5

के लिए वैलारे या वेक्टर का उपयोग करना चाहिए वेक्टर बनाम वालराय का प्रश्न पहले ही here से पूछा जा चुका है। मेरा प्रश्न विशेष रूप से सी ++ 11 के मामले में संदर्भित करता है। मैं "A Tour of C++" और "The C++ Programming Language" पढ़ रहा हूं। दोनों किताबें बजेर्न स्ट्राउस्ट्रप द्वारा लिखी गई हैं। पहली पुस्तक में लेखक बताते हैं कि संख्यात्मक कंप्यूटिंग (अध्याय 12) के लिए std::valarray को प्राथमिकता दी जानी चाहिए। लेकिन फिर दूसरी पुस्तक में, अध्याय 2 9 में, लेखक std::vector के संदर्भ में एक मैट्रिक्स कक्षा लागू करता है।सी ++ 11: क्या मुझे संख्यात्मक कंप्यूटिंग

इसके अलावा googling का थोड़ा सा करके, ऐसा लगता है कि प्रदर्शन के अनुसार, std::vector गतिशील रूप से आवंटित "कच्चे सरणी" जितना तेज़ है।

तो सी ++ 11 के संदर्भ में, कौन सा कंटेनर संख्यात्मक कंप्यूटिंग के लिए प्राथमिकता दी जानी चाहिए?

इस पर मेरे ले होगा कि चूंकि std::vector इसकी सामग्री operator[] (जो कोई सीमा नहीं की जाँच के साथ डेटा के लिए एक संदर्भ रिटर्न) का उपयोग करने के लिए तेजी से पहुँच प्रदान करता है और यह है कि यह भी एक गतिशील आवंटित सरणी पर एक std::vector उपयोग करने के लिए सुरक्षित है , std::vector को प्राथमिकता दी जानी चाहिए। इसके अलावा, सी ++ 11 के बाद से:

  • std::vectorstd::vector::data()
  • std :: वेक्टर का उपयोग कर अंतर्निहित डेटा लिए सीधी पहुँच प्रदान का उपयोग कर आदेश कम स्मृति का उपयोग करने के आकार दिया जा सकता std::vector::shrink_to_fit()
+1

के रूप में आप क्यों उपाय नहीं है और सत्यापित करें जो तेजी से किया जाएगा पर विचार करना चाहते। आधुनिक सी ++ दुनिया में, std :: वेक्टर को डिफ़ॉल्ट कंटेनर के रूप में उपयोग नहीं किया जाना चाहिए जब तक हमारे पास ऐसा करने का कारण न हो। –

उत्तर

2

Valarray अच्छा functionality है, कि आप आसानी से गणितीय कार्यों को तत्व-वार लागू कर सकते हैं और आपके पास बेहतर स्लाइसिंग क्षमताएं हैं। आप उदा। v3 = sin(v2 + v1*3)

फिर भी करते हैं, यदि आप वास्तव में, वैज्ञानिक कंप्यूटिंग कर एक पुस्तकालय का उपयोग कर इस तरह के Eigen

+1

मैं ईजिन, आर्मडिलो, एमटीएल 4 के साथ-साथ कई अन्य मैट्रिक्स पुस्तकालयों से अवगत हूं। इन पुस्तकालयों में से एक समस्या यह है कि उनका स्रोत कोड पूरी तरह से अपारदर्शी है (दूसरे शब्दों में सीखने के उपकरण के रूप में मुश्किल है, या अगर मैं खुद कुछ बदलना चाहता हूं)। मेरा प्रश्न एक वैचारिक आधार पर भी अधिक है। मेरी समझ यह है कि std :: valarray "अधूरा व्यवसाय" है – BigONotation