पर एक स्थिरांक वेक्टर सदस्य चर मैं एक दसवीं कक्षा, जिसे मैंने यहां का एक टुकड़ा प्रदान में पर्वतमाला:श्रृंखलाबद्ध सी ++ इटरेटर निर्माण समय
class X {
public:
template <typename Iter>
X(Iter begin, Iter end) : mVec(begin, end) {}
private:
vector<Y> const mVec;
};
मैं अब इस वर्ग के लिए एक नया श्रृंखलाबद्ध निर्माता जोड़ना चाहते हैं, कुछ की तरह:
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2) : mVec(???) { ??? }
इस तरह के एक निर्माता [begin1, END1) दो सीमाओं तथा [begin2 कड़ी लगाकर जोड़ना होगा, end2) mVec में। चुनौतियों
1 कर रहे हैं) इतना है कि यह मैं सभी संभव हो तो पर अनावश्यक प्रतियां से बचने के लिए चाहते हैं एक्स
2) के अन्य तरीकों में स्थिर माना जाता है मैं, mVec पर स्थिरांक की रक्षा करना चाहते हैं। यही कारण है कि आवेषण लेकर 2 एक समाधान के लिए एक स्थिर विधि है कि एक गैर स्थिरांक अस्थायी निर्माण करती लेकर 1 है, है, और यह देता है, और उसके बाद में सभी मूल्यों
template <typename Iter1, typename Iter2>
X(Iter1 begin1, Iter1 end1, Iter2 begin2, Iter2 end2)
: mVec(concatenate(begin1, end1, begin2, end2)) { }
लिए लेकिन यह है कि प्रतियां श्रृंखलाबद्ध निर्माता को परिभाषित कम से कम एक अतिरिक्त समय, मुझे विश्वास है।
चतुर समाधान के लिए +1 ... एक पुनरावर्तक जो इटरेटर की दो श्रेणियों को फैलाता है ... अच्छा – veefu
boost :: iterator_facade का उपयोग करके लिखना आसान होगा, लेकिन शायद इस मामले में यह सबसे अच्छा शर्त है। कम से कम, जब तक हमारे पास चाल-समर्थन नहीं होता है। – Macke
concat_end की आवश्यकता को न देखें। आप जनरेटेड इटरेटर की तुलना कर सकते हैं टाइप टी 2 के प्रकार टी 2 के साथ एक बूल उत्पन्न करते हैं। –