This SO questionstd::generate
और मानक द्वारा की गई गारंटीओं के बारे में एक चर्चा को जन्म दिया। विशेष रूप से, क्या आप आंतरिक स्थिति वाले फ़ंक्शन ऑब्जेक्ट्स का उपयोग कर सकते हैं और generate(it1, it2, gen)
पर gen()
पर कॉल करने के लिए भरोसा कर सकते हैं, परिणाम *it
पर संग्रहीत करें, gen()
पर कॉल करें, *(it + 1)
आदि में स्टोर करें, या उदाहरण के लिए, क्या यह पीछे से शुरू हो सकता है?सी ++ मानक शब्द: क्या "सीमा में सभी इटरेटर के माध्यम से" अनुक्रमिकता का अर्थ है?
मानक (n3337, §25.3.7/1) इस कहते हैं:
प्रभाव: पहले एल्गोरिथ्म समारोह वस्तु
gen
invokes और सीमा[first,last)
में सभी iterators के माध्यम से जनरल की वापसी मान नियत । दूसरा एल्गोरिदम फ़ंक्शन ऑब्जेक्ट जेन को आमंत्रित करता है और[first,first + n)
श्रेणी में सभी पुनरावृत्तियों के माध्यम से जेन का रिटर्न वैल्यू असाइन करता है यदिn
सकारात्मक है, अन्यथा यह कुछ भी नहीं करता है।
ऐसा लगता है कि कोई आदेश देने की गारंटी दी गई है, खासकर जब से अन्य पैराग्राफ मजबूत शब्दों है, उदाहरण के लिए std::for_each
(प्रभाव:, सीमा [first,last)
में हर इटरेटर अपसंदर्भन पहले से शुरू और last - 1
के लिए आगे बढ़ने के परिणाम के f
लागू होता है यदि हम इसे सचमुच ले रहे हैं, तो यह केवल first
से शुरू होने की गारंटी देता है और last
पर समाप्त होता है - हालांकि आदेश में कोई गारंटी नहीं है)।
लेकिन: दोनों Microsoft's और Apache's C++ standard library दोनों अपने में ऐसे कई पृष्ठ है कि मूल्यांकन की आवश्यकता होती अनुक्रमिक होने के लिए पर उदाहरण दे। और libC++ (algorithm
में) और libstdC++ (bits/stl_algo.h
में) इसे इस तरह कार्यान्वित करें। इसके अलावा, आप इस गारंटी के बिना generate
के लिए बहुत से संभावित एप्लिकेशन खो देते हैं।
क्या वर्तमान शब्द अनुक्रमिकता दर्शाता है? यदि नहीं, तो क्या यह समिति के सदस्यों या जानबूझकर पर्यवेक्षण था?
(मुझे अच्छी तरह से पता है कि ऐसे कई लोग नहीं हैं जो इस प्रश्न के अंतर्दृष्टिपूर्ण उत्तर प्रदान कर सकें, केवल अटकलों या चर्चा के बिना, लेकिन मेरी विनम्र राय में, यह एसओ दिशानिर्देशों के अनुसार यह प्रश्न 'रचनात्मक नहीं' बना देता है ।)
धन्यवाद इस मुद्दे ओर इशारा करते हुए और मुझे for_each
के बारे में पैरा की चर्चा करते हुए के लिए @juanchopanza करने के लिए।
मुझे नहीं लगता कि 'उत्पन्न()' बहुत उपयोगी अगर यह अनुक्रमिक नहीं है। –
मेरा मानना है कि आवश्यक इटरेटर * कक्षा * के संदर्भ में लिया जाने पर अस्पष्टता काफी उठाई जाती है * टेम्पलेट फ़ंक्शन को प्रदान किया जाना आवश्यक है; ** 'टेम्पलेट <वर्ग फॉरवर्डइटरेटर, क्लास जनरेटर>' **। चूंकि पहले और आखिरी दोनों ही अग्रेषित हैं, केवल उन्हें सरणी या वेक्टर निर्माण में ढेर करने के लिए सहेजें, फिर अनुक्रमिक रूप से अनुक्रम के बारे में छलांग लगाने के लिए, आपके पास शुरुआत में शुरू करने के लिए बहुत कम विकल्प है, और अंत में पहुंचें। – WhozCraig
@WozozCraig हे, मैं पूरी तरह से याद किया। मेरी राय में, यह एक अंतर्दृष्टिपूर्ण उत्तर है और आपको इसे इस तरह पोस्ट करना चाहिए। फिर भी, मैं इस पर समिति या पुस्तकालय कार्यान्वयन के करीब लोगों से उनके विचारों के बारे में सुनना चाहता हूं। – us2012