सी ++ एसटीएल कंटेनर पर जेनेरिक ऑपरेशंस कैसे लिखें? उदाहरण के लिए, जावा में Collection इंटरफ़ेस है, जो प्रत्येक जावा कंटेनर (मानचित्रों को छोड़कर) लागू करता है। मैं वास्तविक कंटेनर लिंक्डलिस्ट, हैशसेट, ऐरेब्लॉकिंग क्यूई, इत्यादि के बावजूद जोड़ने, निकालने, शामिल करने और पुनरावृत्तियों जैसे संचालन कर सकता हूं। मुझे यह बहुत शक्तिशाली लगता है। सी ++ में इटरेटर हैं, लेकिन ऑपरेशन के बारे में क्या है जैसे जोड़ने और निकालें? वेक्टर में push_back है, सेट डाला गया है, कतार धक्का है। एक सामान्य तरीके से सी ++ कंटेनर में कुछ कैसे जोड़ें?सी ++ कंटेनर पर जेनेरिक ऑपरेशंस
उत्तर
शीर्षलेख <algorithm>
पर देखें। खोजने, क्रमबद्ध करने, गिनने, प्रतिलिपि बनाने के लिए वहां बहुत सारे सामान्य एल्गोरिदम हैं, जो कि विभिन्न निर्दिष्ट विशेषताओं वाले इटरेटर प्रदान करने वाले किसी भी चीज़ पर काम करते हैं।
सी ++ में std::inserter
और दोस्तों को एक सामान्य तरीके से एक कंटेनर में तत्व जोड़ने के लिए है। वे हेडर फ़ाइल iterator
में हैं।
पुनरावृत्ति:
सभी मानक कंटेनर iterators
जो कंटेनर के तत्वों के लिए उपयोग का आदेश दिया दे दिया है। इन्हें जेनेरिक एल्गोरिदम में भी इस्तेमाल किया जा सकता है जो किसी भी अनुरूप इटरेटर प्रकार पर काम करते हैं।
प्रविष्टि:
सभी दृश्यों और साहचर्य कंटेनरों अभिव्यक्ति c.insert(i, x)
द्वारा उन्हें में डाला तत्वों हो सकता है - जहां c
एक दृश्य या साहचर्य कंटेनर है, i
c
और x
में एक इटरेटर है एक मूल्य है कि आप c
में जोड़ना चाहते हैं।
std::inserter
और दोस्तों को एक सामान्य तरीके से अनुक्रम या सहयोगी कंटेनर में तत्व जोड़ने के लिए उपयोग किया जा सकता है।
हटाने:
किसी भी क्रम या साहचर्य कंटेनर निम्न कोड के लिए काम करता है:
while (true) {
X::iterator it(std::find(c.begin(), c.end(), elem));
if (it == c.end()) break;
c.erase(it);
}
कहाँ X
कंटेनर के प्रकार है, c
एक कंटेनर वस्तु है और elem
के साथ एक वस्तु है वह मान जिसे आप कंटेनर से हटाना चाहते हैं।
दृश्यों के लिए मिटा-निकालें मुहावरा है, जो लग रहा है जैसे:
c.erase(std::remove(c.begin(), c.end(), elem), c.end());
साहचर्य कंटेनरों के लिए आप भी कर सकते हैं:
c.erase(k);
कहाँ k
एक प्रमुख तत्व के लिए इसी है कि आप मिटाना चाहते हैं।
इस सब के लिए एक अच्छा इंटरफ़ेस:
Boost.Range देखें।
नोट - ये संकलित समय प्रतिस्थापन योग्य हैं, जबकि जावा लोग समय-समय पर प्रतिस्थापन योग्य होते हैं। रन-टाइम प्रतिस्थापन की अनुमति देने के लिए टाइप एरर का उपयोग करना आवश्यक है (यानी - एक टेम्पलेटेड सब-क्लास बनाएं जो उस कंटेनर को आवश्यक इंटरफ़ेस आगे बढ़ाता है जिसे इसके साथ तत्काल किया जाता है)।
मिटाने-निकालने केवल _sequences_ पर काम करता है, सभी मानक कंटेनर नहीं। –
@ चार्ल्स बेली - टिप के लिए धन्यवाद! उत्तर अपडेट किया गया। – Mankarse
लेकिन आपने "या सहयोगी कंटेनर" लिखा है जो ठीक से कंटेनर थे जिन्हें मैं सोच रहा था कि आप मिटा-निकालने का उपयोग नहीं कर सकते हैं। –
- 1. सी में, जेनेरिक कंटेनर या सुरक्षित कंटेनर?
- 2. कंटेनर के कंटेनर को फ़्लैट करने के लिए जेनेरिक फ़ंक्शन
- 3. डब्ल्यूपीएफ: जेनेरिक कंटेनर नियंत्रण क्या है?
- 4. सी ++ कंटेनर
- 5. सी # जेनेरिक
- 6. काहिरा पथ पर बूलियन ऑपरेशंस?
- 7. एरलांग बाइनरी पर बाइनरी ऑपरेशंस?
- 8. scipy.sparse matrices पर बूलियन ऑपरेशंस
- 9. सी # - जेनेरिक
- 10. अपरिवर्तनीय सी ++ कंटेनर वर्ग
- 11. सी # जेनेरिक - टाइप पैरामीटर पर प्रतिबंध
- 12. सी ++ एसटीएल कंटेनर
- 13. सी # सिंटेक्स - जेनेरिक सूची
- 14. जेनेरिक
- 15. सी # जेनेरिक स्टेटिक निर्माता
- 16. सी ++ कंटेनर व्यवहार
- 17. सी # गतिशील जेनेरिक सूची
- 18. सी ++: जेनेरिक प्रकार
- 19. सी सहयोगी में फ्लोटिंग पॉइंट ऑपरेशंस हैं?
- 20. सी # जेनेरिक प्रकार
- 21. सी # जेनेरिक कॉपी कन्स्ट्रक्टर
- 22. सी # Struct जेनेरिक निर्माता
- 23. सी # जेनेरिक स्थिर
- 24. सी # असंबद्ध जेनेरिक प्रकार
- 25. सी # जेनेरिक प्रकार
- 26. सी # सार जेनेरिक विधि
- 27. सी # जेनेरिक में शून्य?
- 28. सी #: जेनेरिक ऑब्जेक्ट
- 29. सी # जेनेरिक इंटरफ़ेस विशेषज्ञता
- 30. scipy.sparse matrices पर प्वाइंट वार ऑपरेशंस
सी ++ मानक के अनुभाग 25 की जांच करें, इसमें विभिन्न एल्गोरिदम के 28 पृष्ठ हैं, जो विभिन्न कंटेनरों पर काम करते हैं। –