पर वेक्टर में कई unique_ptrs सम्मिलित करने के लिए मैं एक वेक्टर है:कैसे एक बार
std::vector<std::unique_ptr<int>>
और एक निर्दिष्ट स्थान पर इसे में कई नए unique_ptr<int>
के सम्मिलित करना चाहते हैं। सदस्य std::vector::insert(iterator position, size_type n, const value_type& val)
कार्य करता है लेकिन हां, unique_ptr
की प्रतिलिपि बनाने पर प्रतिबंध इस अधिभार के उपयोग की अनुमति नहीं देते हैं।
मैंने this question पढ़ा है, हालांकि यह unique_ptr
है जो पहले से ही किसी अन्य वेक्टर में मौजूद है। मैं नए बनाना चाहता हूं।
मुझे पता है मैं एक पाश के साथ यह कर सकते हैं, उदाहरण के वेक्टर की शुरुआत करने के लिए 3 नए आइटम को सम्मिलित करने के लिए:
for (int n = 0; n != 3; ++n)
vec.insert(vec.begin(), std::make_unique<int>(0));
हालांकि मैं हो, तो यह करने के लिए एक क्लीनर तरीका सोच रहा हूँ, और संभवतः एक जो नई मेमोरी अप-फ्रंट आवंटित करता है।
स्पष्टीकरण के लिए संपादित करें: वेक्टर में जोड़ने के लिए आइटमों की संख्या पूरी तरह से मनमानी है - मैंने अपने उदाहरण कोड में 3 लिखा है लेकिन यह कोई मूल्य हो सकता है और यह आवश्यक नहीं है कि संकलन समय पर जाना जाता है।
के बाद से आप प्रत्येक 'std :: unique_ptr' के लिए एक अलग' int' आवंटित करने के लिए की जरूरत है, कोई क्लीनर तरीका से बचने के लिए एक पाश का उपयोग किए बिना ऐसा करने के लिए जो 'std :: make_unique() ', या पॉइंटर्स के किसी अन्य सरणी/कंटेनर से आगे बढ़ता है। अन्यथा, अपने डिजाइन को फिर से सोचें। उदाहरण के लिए, हो सकता है कि 3 तत्वों के साथ एक एकल 'std :: वेक्टर 'हो। या एक 'std :: unique_ptr ' 3-तत्व सरणी धारण करना, और उसके बाद एक अलग 'std :: वेक्टर ' उस सरणी में कच्चे पॉइंटर्स युक्त। –
... या 'std :: generate_n ( std :: Inserter (vec, vec.begin()), 3, std :: बाँध (std :: make_unique, 0) );' लेकिन मैं wouldn साफ नहीं है। –
jrok