2015-10-25 14 views
6

मैं इस सदिश है:push_back नए तत्व वेक्टर को

std::vector<my_class> my_vector; 

मैं डिफ़ॉल्ट निर्माता के साथ नए आइटम जोड़ना चाहते हैं। तो, मैं लिखता हूं:

my_vector.push_back(my_class()); 

सीधे प्रकार का उल्लेख किए बिना ऐसा करने का कोई तरीका है? उदाहरण के लिए कुछ की तरह:

my_vector.push_back(auto()); // imaginary code 
+0

तरीके हैं, लेकिन आपके पास जिस तरह से है (स्पष्ट रूप से 'my_class()' का उपयोग करके) सबसे अधिक पठनीय और इसलिए सबसे अधिक रखरखाव योग्य है। –

+0

my_class एक उदाहरण था .. असली एक std :: जोड़ी >, std :: vector >>() तो मुझे पठनीयता के बाद डर था यह लंबा –

+0

जोड़ना पूर्णता के लिए सिर्फ एक और विकल्प है 'my_vector.resize (my_vector.size() + 1) ' –

उत्तर

13

std::vectoremplace_back नामक एक सदस्य समारोह जो वेक्टर में वेक्टर के तत्व प्रकार का एक नया उदाहरण निर्माण करती है, कार्य करने के लिए प्रदान किए गए तर्कों से है।

तो अगर my_class डिफ़ॉल्ट constructible है, तो आप कर सकते हैं:

my_vector.emplace_back(); 
2

अपनी कक्षा एक डिफ़ॉल्ट निर्माता की अनुमति देता है:

my_vector.push_back({}); 
+0

इसे प्रारंभिक सूची निर्माता की आवश्यकता नहीं है। इसे सिर्फ एक डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता है (और निश्चित रूप से सी ++ 11 के लिए समर्थन)। – vsoftco

1
my_vector.push_back(decltype(my_vector)::value_type()); 
1

my_vector.push_back({});

या

भी बेहतर

my_vector.emplace_back();

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