के बिना std :: वेक्टर के आकार को कम करना मेरे पास टेम्पलेट तर्क के std::vector
का उपयोग करके एक टेम्पलेट श्रेणी है। तर्क डिफ़ॉल्ट रचनात्मक नहीं हो सकता है। मैं वेक्टर के आकार को कम करना चाहता हूं (इसे किसी दिए गए आकार में काट दें)। जाहिर हैएक डिफ़ॉल्ट कन्स्ट्रक्टर
vec.resize(reduced_size);
... काम नहीं करता क्योंकि इसे एक डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता होती है।
मैं कर सकता निश्चित रूप से:
- किसी भी इस्तेमाल किया प्रकार के लिए डिफ़ॉल्ट निर्माता बनाने के लिए (जो मुझे इसे जोड़ने के लिए की आवश्यकता है जब यह एक अच्छा डिजाइन विकल्प नहीं हो सकता है)
- कार्य करने के लिए एक डिफ़ॉल्ट मान पारित (अंतरफलक के बेकार अव्यवस्था)
- जबकि प्रश्न लिखने एक निर्माण विधि टेम्पलेट के लिए (भी बेकार अव्यवस्था)
गुजरती हैं, मैंने देखा है कि मैं यह कर सकते हैं,210 अंत करने के लिए वेक्टर ऊपर से तत्वों:
vec.erase (vec.begin() + position, vec.end());
... हालांकि, मैं नहीं यकीन है कि अगर इस resize
के रूप में के रूप में कुशल हो जाएगा हूँ।
क्या डिफॉल्ट कन्स्ट्रक्टर के बिना वेक्टर के आकार को कम करने का कोई प्रभावी तरीका है?
सी ++ 11 समाधान स्वीकार्य हैं।
संपादित करें: लगता है कि दोनों MSVC और जीसीसी एक मिटा कॉल के रूप में आकार बदलने के सिकुड़ने को लागू है, इसलिए है कि मेरे प्रदर्शन सवाल का जवाब।
मुझे नहीं पता कि मिटा क्यों कम कुशल होना चाहिए। यह 0 बाइट्स को याद करेगा, और अन्यथा समान होगा। क्या आपने बेंचमार्क किया है? – Dave
http://stackoverflow.com/questions/4820998/resizing-an-stdvector-which-elements-are- प्रभावित –
मैं अभी भी एक सी ++ नौसिखिया हूं, लेकिन मुझे समझ में नहीं आता कि क्यों 'टी' को डिफॉल्ट कन्स्ट्रक्टर की आवश्यकता होगी अगर सिकुड़ते हैं। –