std::array<...>
के लिए सबसे अच्छा प्रतिस्थापन क्या है यदि मैं constexpr आकार प्रदान नहीं करना चाहता हूं? मुझे लगा कि std::vector
का उपयोग करना सबसे अच्छा होगा और reserve(...)
पर ऐसा करें, लेकिन शायद मैं कुछ दिख रहा हूं?सी ++ प्रतिस्थापन std :: array
उत्तर
हाँ, std::vector
का उपयोग [ "क्यों मानक कंटेनर इतनी धीमी गति से कर रहे हैं?" के नीचे देखें]।
तो अपने कोड
std:array<int, 42> my_array;
द्वारा
std:vector<int> my_array(42);
नोट यह बदलें है यदि: आप शायद है, reserve
उपयोग नहीं करना चाहते, क्योंकि यह vector
खाली हो जाती है। यदि आप std::array
का उपयोग कर रहे हैं, तो आपके कोड में खाली सरणी की अवधारणा नहीं है, इसलिए इसे std::vector
उदाहरण द्वारा सर्वोत्तम रूप से दर्शाया गया है जो निर्माण पर भरा हुआ है, और कभी भी आकार बदलता नहीं है।
'std :: vector
इसके साथ एक छोटी सी समस्या यह है कि यह वेक्टर को शून्य के साथ भरता है, जबकि आपके उदाहरण में सरणी की घोषणा इसे अनियमित कर देती है। इससे कोई फर्क नहीं पड़ता कि वेक्टर का आकार बड़ा होने की उम्मीद है। – Ruslan
std::vector
रनटाइम पर आकार निर्धारित करने की आवश्यकता होने पर, सही विकल्प का सही कंटेनर होना चाहिए।
std::vector<>
शायद आपका उत्तर है। मैं बस reserve()
किसी भी गति की गारंटी नहीं मानता।
Bjarne Stroustrup:
लोग कभी कभी std :: वेक्टर संवर्द्धित बढ़ रही है की लागत के बारे में चिंता। मैं उस बारे में चिंता करता था और उपयोग किया गया आरक्षित() विकास को अनुकूलित करता था। मेरे कोड को मापने के बाद और वास्तविक प्रोग्राम्स में आरक्षित() के प्रदर्शन लाभों को खोजने में परेशानी के बाद, मैंने इटरेटर अमान्यता (मेरे कोड में एक दुर्लभ मामला) से बचने के लिए इसकी आवश्यकता है, इसके अलावा मैंने इसका उपयोग बंद कर दिया। दोबारा: से पहले मापें आप अनुकूलित करें।
मैं कहूंगा कि 'रिजर्व' को कॉल करने वाले ज्यादातर मामलों में स्पीडअप की गारंटी के बारे में इतना कुछ नहीं है (जिसका मतलब है कि एसटीएल कॉल के दौरान "मंदी की गारंटी देता है"), लेकिन जब यह सरल होता है तो छोटे समाधान को चुनने के बारे में स्पष्ट। अक्सर आप आवंटन समय पर जानते हैं कि आपका वेक्टर कितना बड़ा हो जाएगा, भले ही किसी कारण से आप इसे आकार में नहीं बना सकें, लेकिन इसे भरने के लिए 'push_back' को दोहराएं। फिर 'रिजर्व' को कॉल नहीं करना मूर्खतापूर्ण होगा क्योंकि एक मैच मिलने पर रैखिक खोज से बाहर नहीं हो रहा है; सुनिश्चित करें कि गति छोटा हो सकता है, लेकिन सुधार स्पष्ट है। –
- 1. सी ++ 11 std :: array
- 2. std :: array
- 3. std :: array
- 4. std :: array को std :: vector
- 5. सी सीस्टाइल सरणी को std :: array
- 6. std :: array :: front and std :: array :: वापस क्यों नहीं हैं?
- 7. std :: array सदस्य
- 8. क्या std :: array
- 9. क्या std :: array movable है?
- 10. std :: array <char, N> std :: string
- 11. std :: array <T> प्रारंभिकरण
- 12. जीसीसी कभी-कभी std :: array :: ऑपरेटर []
- 13. `एसटीडी के साथ बदलें` std :: vector` :: array`
- 14. `std :: array <T, n>`
- 15. सी में सूचक Array?
- 16. std :: stoi और std :: array g ++ C++ 11 के साथ संकलित क्यों नहीं हैं?
- 17. वॉलपेपर प्रतिस्थापन (विंडोज़/सी #)
- 18. सी # स्ट्रिंग प्रतिस्थापन
- 19. सी # स्ट्रिंग प्रतिस्थापन प्रश्न
- 20. एक numpy array
- 21. std :: array के इनलाइन प्रारंभिकरण में क्या गलत है?
- 22. std :: array को एक बिंदु में कैसे परिवर्तित करें?
- 23. std :: array < T, 0 > क्यों खाली नहीं है?
- 24. std :: array startizer char के लिए कैसे काम करता है?
- 25. सी ++ std :: स्ट्रिंग
- 26. सी ++ std :: स्वतंत्र std :: threads
- 27. सी ++ के लिए प्रतिस्थापन भाषा?
- 28. दबाने सी मैक्रो चर प्रतिस्थापन
- 29. std :: vector और std :: array के लिए C++ प्रारंभकर्ता_सूची व्यवहार अलग क्यों है?
- 30. PHP में सी ++ के std :: वेक्टर के बराबर है?
एक निश्चित आकार ['std :: dynarray'] (http://en.cppreference.com/w/cpp/container/dynarray) के लिए एक प्रस्ताव था। दुर्भाग्य से यह इसे सी ++ 14 में नहीं बनाया गया। – juanchopanza
समिति ने इसे स्वीकार करने का फैसला क्यों नहीं किया? मुझे लगता है कि यह प्रयोगात्मक है, जिसका अर्थ है कि यह शायद अभी भी एक मौका खड़ा है। –