2015-11-09 14 views
5

सी ++ प्राइमर में एक समस्या, वेक्टर पर शुरू होने और समाप्त होने पर मुझे पता है कि वेक्टर :: आकार() मदद कर सकता है, लेकिन जब मैं सिर्फ सरणी तर्क देता हूं तो वे कैसे काम करते हैं। जैसे:जब तर्क एक सरणी है तो सी ++ कैसे शुरू होता है और समाप्त होता है?

int arr[] = {1, 2, 3}; 
size = end(arr) - begin(arr); 

कैसे अंत (आगमन) करते हैं और शुरू (आगमन) सही ढंग से काम?

+4

क्या आपका मतलब 'int arr [] 'था? – fghj

+3

[std :: end कैसे सरणी के अंत को जानता है?] (Http://stackoverflow.com/q/33496322/1708801) डुप्लिकेट नहीं होने पर प्रासंगिक लगता है। –

+0

मुझे लगता है कि यह प्रश्न सख्ती से बोल रहा है क्योंकि यह प्रश्न दोनों शुरू करने और समाप्त करने के बारे में पूछता है, यह सही डुप्लिकेट नहीं है। इसके अलावा @ user1034749 प्रश्न भी स्पष्ट किया जाना चाहिए। –

उत्तर

4

से कोड का एक टुकड़ा चस्पा करेंगे तो हम How does std::end know the end of an array? देख सकते हैं कि कैसे काम करता है std::end देख सकते हैं और देखते हैं कि std::end के लिए हस्ताक्षर है:

template< class T, std::size_t N > 
T* end(T (&array)[N]); 

और यह सरणी के आकार को कम करने के लिए टेम्पलेट गैर-प्रकार पैरामीटर का उपयोग कर रहा है और यह अंत प्राप्त करने के लिए पॉइंटर अंकगणित का मामला है:

return array + N ; 

std::begin के लिए हस्ताक्षर समान है, नाम के अपवाद के साथ:

template< class T, std::size_t N > 
T* begin(T (&array)[N]); 

और गणना सरणी की शुरुआत बस array to pointer decay की बात है जो हमें के पहले तत्व के लिए सूचक देता है सरणी।

सी ++ 14 में ये दोनों कॉन्स्टेक्स बन गए।

2

मैं सिर्फ here

template <class _Tp, size_t _Np> 
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 
_Tp* 
begin(_Tp (&__array)[_Np]) 
{ 
    return __array; 
} 

template <class _Tp, size_t _Np> 
inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 
_Tp* 
end(_Tp (&__array)[_Np]) 
{ 
    return __array + _Np; 
} 
+0

यह एक भयानक उत्तर है, इसमें कोई स्पष्टीकरण नहीं है। –

+0

@ShafikYaghmour, कोड पर्याप्त स्पष्ट नहीं है? –

+0

आपको बहुत धन्यवाद, हालांकि मुझे अभी भी कोड के इस टुकड़े में "इनलाइन" नहीं पता है .... – alexxx

संबंधित मुद्दे

 संबंधित मुद्दे