std::vector<std::unique_ptr<SomeType> >
को देखते हुए, क्या यह remove_if
का उपयोग करने के लिए कानूनी है? दूसरे शब्दों में, इस कोड को दिए गए:क्या आप `std :: unique_ifr 'के कंटेनर पर` std :: remove_if` का उपयोग कर सकते हैं?
std::vector<std::unique_ptr<SomeType> > v;
// fill v, all entries point to a valid instance of SomeType...
v.erase(std::remove_if(v.begin(), v.end(), someCondition), v.end());
, मैं मिटा है कि अभी भी v
में सभी संकेत मान्य हैं के बाद की गारंटी कर रहा हूँ। मुझे पता है कि std::remove_if
के सहज कार्यान्वयन को देखते हुए, और मैंने देखा है कि सभी कार्यान्वयन, वे होंगे। मैं जानना चाहता हूं कि मानक में कुछ भी है जो इसकी गारंटी देता है; यानी std::remove_if
को कॉपी करने की अनुमति नहीं है, इसकी वैध प्रविष्टियों को प्रतिलिपि के बिना अपने अंतिम स्थान पर कॉपी किए बिना।
(मैं निश्चित रूप से कर रहा हूँ,, मान कि हालत नकल नहीं है, तो हालत की तरह एक हस्ताक्षर है:।
struct Condition
{
bool operator()(std::unique_ptr<SomeType> ptr) const;
};
, तो जाहिर है, संकेत के सभी के बाद अमान्य हो जाएँगे remove_if
।)
जेम्स कानज़ प्रश्न पूछ रहे हैं - एक बहुत ही दुर्लभ घटना! – Nawaz
'unique_ptr' प्रतिलिपि बनाने योग्य नहीं है, इसलिए यदि आपने अनुमान लगाया है कि आपका कोड संकलित नहीं होगा। – interjay
क्यों नहीं? 'std :: अद्वितीय' कॉपी करने योग्य नहीं है लेकिन जंगम है। इसे कंटेनर के अंत में ले जाया जा सकता है। –