2014-09-08 7 views
8

मेरे डिजाइन में मेरे पास एक कक्षा है जो अधिकतर std::vector<OtherClass> के लिए एक मोर्चा है। क्या मुझे, मेरे क्लास इंटरफ़ेस में, किसी भी कॉलर को std::iterator पर सौंपना चाहिए, पूरे vector के संदर्भ पर हाथ रखें या मेरे vector की सामग्री तक पहुंचने के लिए फ़ंक्शंस का एक सेट प्रदान करें? या पूरी तरह से इसे पूरी तरह से दृष्टिकोण?मेरी कक्षा ज्यादातर कंटेनर के लिए एक मोर्चा है, क्या मुझे इस तथ्य का पर्दाफाश करना चाहिए?

अधिक जानकारी: कंटेनर में तत्व प्रारंभ करने के दौरान स्थापित किए जाएंगे, और जब प्रोग्राम सामान्य रूप से चल रहा है तब जोड़ा नहीं जाएगा। मेरी कक्षा के ग्राहक अक्सर OtherClass तत्वों की स्थिति को प्रश्न और संशोधित करेंगे, हालांकि समय-महत्वपूर्ण फैशन में नहीं।

+0

रैपर वर्ग के सदस्यों के बजाय 'std :: vector' को स्वीकार करने वाले नि: शुल्क कार्यों का उपयोग करने पर विचार करें। – erenon

+3

यह बहुत ही विशिष्ट अनुप्रयोग है। Iterators काम कर सकते हैं, लेकिन क्या होगा यदि आप लगातार वेक्टर में जोड़ रहे हैं? वेक्टर पुन: आवंटित होने पर इटरेटर्स को अमान्य कर दिया जाएगा। कृपया हमें और जानकारी दें, कृपया! – Conduit

+0

यदि 'अन्य क्लास 'स्थिर है, तो विशेषज्ञता क्यों नहीं है? – Nelfeal

उत्तर

1

आपको आंतरिक रूप से वेक्टर को संशोधित करने के लिए फ़ंक्शन बनाना चाहिए। यहां बताया गया है:

कंपाइलर के आधार पर, आप एसटीएल (मानक टेम्पलेट लाइब्रेरी) के विभिन्न संस्करण चला रहे हैं, जो अप्रत्याशित मुद्दों का कारण बन सकते हैं, अनुमानतः वे std :: वेक्टर जिस तरह से इसे बनाते हैं, उस समय से बदल सकते हैं लाइब्रेरी का पुराना (या नया) संस्करण और इसे भेज दें।

हालांकि, मुझे लगता है कि यह एक पुस्तकालय नहीं है, या किसी अन्य कंपाइलर के साथ संभावित रूप से उपयोग की जाने वाली परियोजना है। जब तक आप एसटीएल के समान संस्करण को चलाते और संकलित करते हैं, तब तक वे वेक्टर पर संदर्भ या सूचक भेजने के लिए सुरक्षित हैं।

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