मुझे इस समय एक मस्तिष्क का झटका लग रहा है और मैं एक सरणी लेने के लिए एक तेज़ तरीका ढूंढ रहा हूं और इसे आधा पास एक समारोह में भेजता हूं। अगर मेरे पास दस तत्वों में से एक सरणी थी, तो कुछ भाषाओं में मैं ए [5:] को फ़ंक्शन में कुछ पास कर सकता था और इसके साथ किया जा सकता था। क्या सी ++ में कोई समान निर्माण है? जाहिर है, मैं लूपिंग फ़ंक्शन से बचने और सॉर्ट करना चाहता हूं।क्या किसी सरणी से उप सरणी प्राप्त करने के लिए C++ में कोई तरीका है?
उत्तर
हां। सादे सी में आप पॉइंटर्स का उपयोग करते हैं, लेकिन सी ++ में आप किसी भी प्रकार के इटरेटर का उपयोग कर सकते हैं (एक पॉइंटर को इटरेटर माना जा सकता है)।
template<typename Iter>
void func(Iter arr, size_t len) { ... }
int main() {
int arr[10];
func(arr, 10); // whole array
func(arr, 5); // first five elements
func(arr + 5, 5); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.size()); // All elements
func(vec.begin(), 5); // first five
func(vec.begin() + 5, vec.size() - 5); // all but first 5
return 0;
}
ठेठ चाल सरणी के पहले तत्व के लिए सूचक गुजरती हैं, और फिर एक अलग तर्क का उपयोग सरणी की लंबाई पारित करने के लिए है। दुर्भाग्य से कोई सीमा जांच नहीं है, इसलिए आपको इसे सही करने के लिए सावधान रहना होगा या आप अपनी याददाश्त पर लिखेंगे।
आप आधा खुली श्रेणियों का भी उपयोग कर सकते हैं। यह करने का यह सबसे आम तरीका है। मानक पुस्तकालय में कई फ़ंक्शन (जैसे std::sort
) इस तरह से काम करते हैं।
template<class Iter>
void func(Iter start, Iter end) { ... }
int main() {
int arr[10];
func(arr, arr + 10); // whole array
func(arr, arr + 5); // first five elements
func(arr + 5, arr + 10); // last five elements
std::vector<Thing> vec = ...;
func(vec.begin(), vec.end()); // whole vector
func(vec.begin(), vec.begin() + 5); // first five elements
func(vec.begin() + 5, vec.end()); // all but the first five elements
return 0;
}
फिर, कोई सीमा जांच नहीं है।
मुझे लगता है कि आप जिस टेम्पलेटिंग के बारे में बात कर रहे थे वह है: 'टेम्पलेट
बस' टेम्पलेट <टाइपनाम Iter> शून्य func (Iter प्रारंभ, Iter end)' –
यदि आप सीमा शुल्क जांच सीमाओं का उपयोग करना चाहते हैं, 'और vec.at (5) ', या' vec.begin() + अधिकतम (5, vec.size())' अगर '5' वास्तव में 'अधिकतम 5' है । – jthill
- 1. बहुआयामी सरणी - उप सरणी
- 2. सरणी में मिलान उप-सरणी। योजना
- 3. "अर्ध-बराबर" में एक सरणी को उप-विभाजित करने के लिए एल्गोरिदम, वर्दी उप-सरणी
- 4. क्या किसी विधि को पारित तर्कों की सरणी प्राप्त करने का कोई तरीका है?
- 5. क्या कोई सरणी से फ़्लोट प्राप्त करने का कोई शॉर्टेंड तरीका है?
- 6. PHP में उप सरणी कैसे प्राप्त करें?
- 7. रूबी इंडेक्स (उप सरणी)
- 8. जांचें कि किसी सरणी में किसी अन्य सरणी से कोई आइटम शामिल है
- 9. किसी सरणी को ऑनलाइन घोषित करने का कोई तरीका?
- 10. क्या कोई सरणी आइटम मान परिवर्तित होने पर कॉलबैक प्राप्त करने का कोई तरीका है?
- 11. उप सरणी कुंजी मान
- 12. पीएचपी बहुआयामी सरणी - मूल्य के लिए खोज और उप सरणी
- 13. पिक्सेल सरणी घुमाने के लिए एक अच्छा तरीका क्या है?
- 14. सी # में किसी सरणी के हिस्से को किसी सरणी में कॉपी करने के लिए कैसे करें?
- 15. गैर-निरंतर चर के साथ सरणी को प्रारंभ करने का कोई तरीका है? (C++)
- 16. C# बाइट सरणी से xml बनाएं
- 17. सरणी हैश करने के लिए
- 18. जावास्क्रिप्ट में किसी तालिका के लिए कॉल टैग की सरणी तक पहुंचने का कोई तरीका है?
- 19. जावा में सरणी के उप सरणी को डेटा कॉपी किए बिना कैसे प्राप्त करें?
- 20. कैसे Django में एक सरणी प्राप्त करने के लिए अजाक्स
- 21. किसी सरणी में पहली प्रविष्टि के लिए पॉइंटर प्राप्त करना
- 22. सरणी से किसी सरणी को कैसे घटाएं?
- 23. एक स्ट्रिंग सरणी को C#
- 24. क्या सरणी पैरामीटर सरणी के लिए बाध्यकारी है?
- 25. जांचें कि कोई मान किसी सरणी में है (सी #)
- 26. सी # में सरणी के लिए आवृत्ति वितरण की गणना करने का सबसे तेज़ तरीका क्या है?
- 27. C/C++ समारोह शीर्षक में सरणी चर
- 28. 2 डी सरणी C++
- 29. एपीआई बाइट सरणी से आईएल प्राप्त करने के लिए
- 30. PHP में किसी सरणी में सभी वर्णमाला वर्ण प्राप्त करने का तरीका?
शायद आपके फ़ंक्शन को इटरेटर लेना चाहिए। – chris
आप सी ++ में फ़ंक्शंस के लिए सरणी पास नहीं कर सकते हैं क्योंकि C++ में सरणी मान नहीं हैं। तो आपका काम वास्तव में क्या लेता है? – melpomene
मेरे पास एक सरणी int [] a = {1,2,3,4,5,6,7,8,9,10} होगी। मैं फिर एक उप सरणी int [] a1 = {6,7,8,9,10} प्राप्त करने का एक तरीका ढूंढ रहा हूं। –