cbegin नीचे की तरह कार्यान्वित किया जाता है:
template <class C>
auto cbegin(const C& container)->decltype(std::begin(container))
{
return std::begin(container); // see explanation below
}
इसी शुरू के रूप में नीचे है।
template< class C >
auto begin(C& c) -> decltype(c.begin()); //calling container's begin
यह cbegin टेम्पलेट तर्क एक कंटेनर की तरह डेटा संरचना, सी का प्रतिनिधित्व करने के किसी भी प्रकार को स्वीकार करता है, और वह अपने संदर्भ-टू-स्थिरांक पैरामीटर, कंटेनर के माध्यम से इस तर्क तक पहुँचता है। यदि सी एक पारंपरिक कंटेनर प्रकार (उदा।, एक std :: वेक्टर) है, तो कंटेनर उस कंटेनर के कॉन्स संस्करण (उदाहरण के लिए, एक कॉन्स std :: वेक्टर &) का संदर्भ होगा। गैर -म्बर एक कॉन्स कंटेनर पर कार्य शुरू करें (सी ++ 11 द्वारा प्रदान किया गया) const_iterator उत्पन्न करता है, और यह इमेटरेटर यह टेम्पलेट लौटाता है।
उदाहरण के लिए, यदि मैंने वेक्टर को cbegin
पर तर्क के रूप में उपयोग किया है।
std::vector<int> v1;
std::cbegin(v1);
अब, देखते हैं कि कैसे टेम्पलेट कटौती इस मामले में हुआ, टेम्पलेट (कक्षा सी) वेक्टर और cbegin
(स्थिरांक सी & कंटेनर) के पैरामीटर const vector<int> &
होने के लिए निष्कर्ष निकाला जा करने के लिए निष्कर्ष निकाला है। अब जब कंटेनर स्वयं स्थिर है, तो यह वेक्टर की शुरुआत के निरंतर संस्करण को वापस कर देगा।
iterator begin();
const_iterator begin() const; //This will be used .
const_iterator cbegin() const;
स्रोत
2016-01-18 11:18:40
मैं मानता हूं कि पृष्ठ इस पर थोड़ा स्पष्ट हो सकता है और लोगों को इसका कारण नहीं बताएगा (जैसा दिए गए उत्तरों में किया गया है)। इसके अलावा, एक स्पष्टीकरण क्यों cbegin पेश किया गया था (स्थिरता की गारंटी के लिए और पैरामीटर की स्थिरता पर भरोसा नहीं) मदद कर सकता है। – stefaanv