यह एक साधारण सी ++ प्रश्न माना जाता है, लेकिन मैं सी ++ जारी कर रहा हूं और कुछ मूलभूत जानकारी नहीं जानता हूं। मैं एक वर्ग है कि यह में वस्तुओं का एक वेक्टर के साथ एक struct शामिल हैं, इसलिए कुछ इस तरह है:संरचना डेटा की प्रतिलिपि किए बिना वेक्टर में जोड़ें
struct my_struct{
Irrelevant_Object object,
vector<tuple> tuple_list;
}
struct और टपल (एक और struct) वास्तुकला द्वारा पूर्वनिर्धारित और मेरे विधि में मेरे लिए दिए जाते हैं; तो मैं उन्हें बदल नहीं सकता। मैं मूल tuple_list उत्पत्ति में एक tuple उत्पन्न और डालना चाहता हूँ।
सरल समाधान में एक विधि है जो एक नया ट्यूपल ऑब्जेक्ट आवंटित करता है, ट्यूपल डेटा में भरता है, फिर tuple_list.push_back() को कॉल करता है और आवंटित ट्यूपल में पास करता है। लेकिन इसके लिए केवल नए टुपल को आवंटित करने की आवश्यकता होगी ताकि केवल push_back विधि वेक्टर के पहले से परिभाषित मेमोरी स्पेस में (बड़े) ट्यूपल स्ट्रक्चर की सभी सामग्री की प्रतिलिपि बना सके। इसलिए मैं इस तरह से ऐसा करने के लिए वेक्टर में ट्यूपल सामग्री की प्रतिलिपि बनाने की कम आवंटन के साथ-साथ आवंटन/हटाए जाने का खर्च चुका रहा हूं। ऐसा लगता है कि यह अक्षम है, और चूंकि यह विधि फ़ंक्शन के महत्वपूर्ण पथ में होगी, इसलिए मैं कुछ तेज़ी से पसंद करूंगा (स्वीकार्य रूप से मुझे संदेह है कि यह विधि बोतल-गर्दन होगी, और मुझे शुरुआती अनुकूलन == खराब पता है। हालांकि, मैं हूं सी ++ सिंटैक्स के बारे में कुछ सीखने के लिए इस सवाल को और अधिक पूछें, फिर वास्तव में मेरे कोड में ऐसा करने की एक बेहद जरूरी ज़रूरत है)।
तो मेरा सवाल यह है कि, मेरे टुपल सूची की सामग्री को भरने और कॉपी करने के बिना एक त्वरित तरीका है? यदि यह एक सरणी थी तो मैं सरणी को जितना चाहूं उतना बड़ा बना सकता था, फिर tuple_list [0] के संदर्भ में टुपल बनाता है जो फ़ंक्शन बनाता है। इस तरह funciton पहले से आवंटित tuple की खाली सामग्री को एक नया आवंटित किए बिना या एक tuple से दूसरे में कॉपी किए बिना सरणी के भीतर भर सकता है। मैंने उत्सुकता से वेक्टर के साथ ऐसा करने की कोशिश की और मेरे सीटर गलती के साथ समाप्त हो गया जब मेरा इटरेटर 0x0 की ओर इशारा करता था, इसलिए मुझे लगता है कि वाक्यविन्यास वैक्टरों के लिए काम नहीं करता है। तो क्या इस असाइनमेंट को करने का एक त्वरित तरीका है?
चूंकि यह वास्तविक प्रश्न के रूप में भाषा सीखने के लिए एक प्रश्न है, इसलिए किसी अन्य स्पर्शिक रूप से प्रासंगिक सामग्री में फेंकने के लिए स्वतंत्र महसूस करें, जो आप सोचते हैं, मैं सीखना चाहता हूं।
धन्यवाद।
'std :: vector' के अधिभारित कन्स्ट्रक्टर देखें और शायद अपनी संरचना के लिए एक कन्स्ट्रक्टर और प्रारंभकर्ता सूची प्रदान करें?अन्यथा आप अपने वेक्टर को हमेशा उस स्थान पर 'आरक्षित' कर सकते हैं जिसकी आपको आवश्यकता है ताकि 'push_back' कॉल उपलब्ध स्थान का उपयोग कर सके और आवंटन लागत के उच्चतम न हो। एक वास्तविक जवाब प्रदान करने के लिए एक और ठोस उदाहरण की आवश्यकता है और मामले का उपयोग करें। – AJG85