मैं लिख रहा हूं (एक आत्म-शिक्षण अभ्यास के रूप में) एक साधारण एसटीएल-जैसी रेंज। यह एक अपरिवर्तनीय-रैंडम-एक्सेस "कंटेनर" है।एसटीएल-लाइक रेंज, अगर मैंने ऐसा किया तो क्या गलत हो सकता है?
struct range
{
...
private:
value_type m_first_element, m_element_count, m_step;
};
क्योंकि मेरी सीमा तत्व पकड़ नहीं है, यह वांछित तत्व की गणना करता है: मेरी सीमा है, केवल अपनी शुरुआत तत्व, तत्वों की संख्या और कदम आकार (लगातार दो तत्वों के बीच अंतर) रहता है का उपयोग करते हुए निम्नलिखित:
// In the standards, the operator[]
// should return a const reference.
// Because Range doesn't store its elements
// internally, we return a copy of the value.
value_type operator[](size_type index)
{
return m_first_element + m_step*index;
}
आप देख सकते हैं, मैं एक const reference
वापस नहीं कर रहा हूँ के रूप में मानकों का कहना है। अब, क्या मुझे लगता है कि मानक पुस्तकालय में गैर-उत्परिवर्तनीय एल्गोरिदम का उपयोग करने के मामले में const reference
और तत्व की एक प्रति समान है?
विषय के बारे में कोई सलाह बहुत सराहना की है।
@ स्टेव जेसॉप: अच्छा बिंदु कि आपने इटरेटर का उल्लेख किया है।
असल में, मैंने sgi as my reference का उपयोग किया। उस पृष्ठ के अंत में, यह कहते हैं:
मान लिया जाये x और y एक ही श्रेणी से iterators हैं:
Invariants पहचान
x == y if and only if &*x == &*y
इसलिए, यह फोड़े उसी मूल प्रश्न के नीचे मैंने वास्तव में पूछा है :)
यदि आपने ऑपरेटर में वापस जाने के लिए कोई तत्व बनाया है [] तो उसके संदर्भ में वापस आ गया है, क्या यह संदर्भ हमेशा खराब संदर्भ नहीं होगा, क्योंकि उदाहरण तुरंत दायरे से बाहर हो जाएगा?
कंटेनर में संदर्भों के बारे में मानक वार्ता, जो एक कंटेनर नहीं है। –
@ क्रिस मैं सहमत हूं कि यह वास्तविक कंटेनर नहीं है। मैं अपने दूसरे वाक्य में डबल कोट्स के बीच "कंटेनर" क्यों डालता हूं। – AraK
आप प्रेरणा के लिए boost :: iterator_range और boost :: sub_range को देखना चाह सकते हैं: http://www.boost.org/doc/libs/1_41_0/libs/range/index.html –