2015-05-15 17 views
14

अगर मैंstd :: सरणी बनाम सरणी प्रदर्शन

int myArray[3] = {1,2,3}; 

की तरह एक बहुत ही सरल सरणी का निर्माण करना चाहते मैं std::array बजाय उपयोग करना चाहिए?

std::array<int, 3> a = {{1, 2, 3}}; 

सामान्य पर std :: सरणी का उपयोग करने के क्या फायदे हैं? क्या यह अधिक प्रदर्शनकारी है? कॉपी/एक्सेस के लिए संभालना आसान है?

+1

std :: के साथ बहु आयामी सरणी को परिभाषित करना मुश्किल होगा – goGud

+5

@goGud: मुश्किल नहीं, बस अधिक verbose। –

उत्तर

25

सामान्य पर std::array का उपयोग करने के क्या फायदे हैं?

इसमें अनुकूल मूल्य अर्थशास्त्र है, ताकि इसे मूल्य से कार्य से पारित किया जा सके या वापस कर दिया जा सके। इसका इंटरफ़ेस आकार को ढूंढना और एसटीएल-स्टाइल इटरेटर-आधारित एल्गोरिदम के साथ उपयोग करना अधिक सुविधाजनक बनाता है।

क्या यह अधिक प्रदर्शनकारी है?

यह बिल्कुल वही होना चाहिए। परिभाषा के अनुसार, यह एक साधारण समेकित है जिसमें एक सरणी है जिसका एकमात्र सदस्य है।

कॉपी/एक्सेस के लिए संभालना आसान है?

हां।

5

std::array सी एरे के लिए शून्य-ओवरहेड रैपर के रूप में डिज़ाइन किया गया है जो इसे अन्य सामान्य + मान को अन्य सी ++ कंटेनर के अर्थशास्त्र की तरह देता है।

आपको अभी भी अतिरिक्त सुविधाओं का आनंद लेने के दौरान रनटाइम प्रदर्शन में कोई अंतर नहीं दिखना चाहिए।

शैली सरणी के बजाय std::array का उपयोग करना एक अच्छा विचार है यदि आपके पास सी ++ 11 है या हाथ में बढ़ावा है।

1

std::array में मूल्य semantics है जबकि कच्चे सरणी नहीं है। इसका मतलब है कि आप std::array कॉपी कर सकते हैं और इसे एक प्राचीन मूल्य की तरह व्यवहार कर सकते हैं। आप उन्हें फ़ंक्शन तर्क के रूप में मान या संदर्भ द्वारा प्राप्त कर सकते हैं और आप उन्हें मूल्य से वापस कर सकते हैं।

यदि आप कभी भी std::array कॉपी नहीं करते हैं, तो कच्चे सरणी से कोई प्रदर्शन अंतर नहीं होता है। यदि आपको प्रतियां बनाने की आवश्यकता है तो std::array सही काम करेगा और अभी भी समान प्रदर्शन देना चाहिए।

10

एक std::array एक सी शैली सरणी के चारों ओर एक बहुत पतली आवरण, मूल रूप से

template<typename T, size_t N> 
class array 
{ 
public: 
    T _data[N]; 
    T& operator[](size_t); 
    const T& operator[](size_t) const; 
    // other member functions and typedefs 
}; 

यह एक aggregate है के रूप में परिभाषित है, और यह आप यह लगभग एक मौलिक प्रकार की तरह उपयोग करने के लिए अनुमति देता है (यानी आप पास कर सकते हैं -बी-वैल्यू, असाइन इत्यादि, जबकि एक मानक सी सरणी को किसी अन्य सरणी में सीधे असाइन या कॉपी नहीं किया जा सकता है)। आपको कुछ मानक कार्यान्वयन (अपने पसंदीदा आईडीई से परिभाषा पर कूदना चाहिए या सीधे <array> खोलना चाहिए), यह सी ++ मानक पुस्तकालय का एक टुकड़ा है जो पढ़ने और समझने में काफी आसान है।

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