बेहतर तरीका है क्योंकि यह अधिक विस्तृत है
begin(container)
end(container)
है। उदाहरण के लिए, टेम्पलेट तर्क कटौती का उपयोग एक स्थिर सरणी के आकार को निर्धारित करने के लिए किया जा सकता है और इसलिए begin(my_static_array)
और end(my_static_array)
काम करेगा।
अधिक आम तौर पर, आप (।) अंत (।) शुरू करने के लिए अधिभार/विशेषज्ञता जोड़ सकते हैं और जेनेरिक एल्गोरिदम में अपरिवर्तनीय विरासत प्रकारों का उपयोग कर सकते हैं।
आप वास्तव में केवल आप एक सामान्य एल्गोरिथ्म अपने आप
template <typename T>
void foo (T & t)
{
bar (begin(t), end(t)); // certainly better than bar(t.begin(), t.end())
}
ग्राहक कोड में यह बात इतना नहीं लिख रहे हैं, तो इस बारे में चिंता करने की जरूरत। वास्तव में, मैं कहूंगा कि उस मामले में नए रूप का उपयोग न करें - मुझे कुछ परिस्थितियों के लिए कुछ शैलियों/मुहावरे आरक्षित करना पसंद है, मेरे दिमाग को विभाजित करें। लेकिन यह सिर्फ मुझे है।
for (auto i = c.begin(); i != c.end(); ++i)
// I can see at-a-glance that c is a STL-style container.
// That might be useful to know. I can probably dismiss static arrays
// and unorthodox containers as possibilities.
foo (i, c.size());
आपके उदाहरणों के प्रति पुनरावृत्ति के साथ कुछ लेना देना नहीं है। यह इस श्रेणी के बारे में है कि कंटेनर का एक वर्ग है जो कक्षा के किसी ऑब्जेक्ट से है। – pmr
अनुशंसित तरीकों के लिए अभी तक पर्याप्त अनुभव नहीं है। सिंटैक्स और स्टार्ट/एंड फ्री फ़ंक्शंस के लिए नया फायदे हैं, लेकिन इसमें कमी का अनुभव हो सकता है (मुझे उम्मीद है कि कोई भी नहीं, लेकिन मुझे अनुभव की अधिकांश शिक्षाओं की उम्मीद नहीं थी, भले ही मुझे कुछ उम्मीद थी)। – AProgrammer