मानक एल्गोरिदम और क्लाइंट उपयोगकर्ताओं दोनों के लिए, इस तरह के इटरेटर के उपयोग को कम करने के लिए यह है।
उदाहरण के लिए (याद रखें कि RandomAccessIterator
ForwardIterator
की एक उप-प्रकार है):
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last)
{
RandomAccessIterator pivot, i, j;
//do your sorting algorithm
}
अगर वे constructible डिफ़ॉल्ट नहीं कर रहे थे आप इसे संकलित करने के लिए बस के लिए first
या last
करने के लिए उन्हें आवंटित करने के लिए की आवश्यकता होगी।
आपको इसे डिफ़ॉल्ट मान पर सेट करने की आवश्यकता नहीं है। इस तरह के अनियमित इटरेटर का कोई भी उपयोग अपरिभाषित है। ऐसा नहीं है कि कुछ चेक जोड़ने के लिए विशेष रूप से डीबग बिल्ड में बुद्धिमान नहीं होगा।
और नहीं, आपको डिफ़ॉल्ट कन्स्ट्रक्टर में फेंकना नहीं चाहिए। यह तकनीकी रूप से अनुकूल होगा, लेकिन कई एल्गोरिदम अप्रत्याशित रूप से विफल हो जाएंगे।
इससे कोई फर्क नहीं पड़ता कि इसके लिए कोई वास्तविक कारण है; यह आवश्यक है*। तो अपने जोखिम पर आवश्यकता को नजरअंदाज करें। –
ठीक है, अगर इटेटरेटर तर्कसंगत रूप से तर्क पर निर्भर करता है, तो विकल्प डिफ़ॉल्ट कन्स्ट्रक्टर को जोड़ना है जो ऑब्जेक्ट को अमान्य स्थिति में छोड़ देता है, जो खतरे के साथ छेड़छाड़ भी करता है। – Ayjay
ए * काम * विकल्प आपके इटरेटर को बदलना होगा ताकि वे किसी तर्क पर भरोसा न करें। उन्हें एक वैध लेकिन अवधारणात्मक खाली स्थिति में रखें। –