मान लीजिए मैं ints का एक वेक्टर,वेक्टर पॉइंटर स्थानों की गारंटी है?
std::vector<int> numbers;
कि मूल्यों के एक समूह के साथ से भर जाता है, तो मैं कहता हूँ ऐसा करते हैं (जहां एक प्रविष्टि 43 में मौजूद है)
int *oneNumber = &numbers[43];
oneNumber होने की गारंटी है है हमेशा सूचकांक 43 पर int पर इंगित करें, भले ही मैं संख्याओं का आकार बदलता हूं जैसे संख्या.resize (46)?
मुझे 100% यकीन नहीं है कि अपेक्षित व्यवहार क्या है, मुझे पता है कि वैक्टरों को संगत होने की गारंटी है लेकिन यह सुनिश्चित नहीं है कि अगर निरंतरता का अर्थ यह भी होगा कि वेक्टर में सभी सूचकांक पूरे जीवन में एक ही स्थान पर बने रहेंगे।
इस कारण से मैं हमेशा मूल्य प्रकार के एक वेक्टर बनाने, क्योंकि मैं अनिवार्य रूप से वेक्टर अंदर वस्तुओं के लिए एक सूचक की जरूरत से सावधान कर रहा हूँ के लिए। तो मैं 'int * ref = और संख्याओं [43]' जैसे संदर्भ को सहेजता हूं .. बाद में 'पुश_बैक' में 'संख्या' और WHAMMO में कुछ करें! बग: 'ref' अमान्य है, क्योंकि' संख्या' पूरी तरह से फिर से आवंटित किया गया है और पूरी तरह से अलग स्मृति स्थान में सहेजा गया है। – bobobobo
@bobobobo बहुत सच है। यद्यपि ऐसी परिस्थितियों के लिए जहां निर्माण समय पर तत्वों की संख्या ज्ञात है (और नहीं, मैं 'std :: array' का उपयोग नहीं कर सकता, क्योंकि मैं 'लूपिंग द्वारा मूल्यों का निर्माण' करता हूं), 'आरक्षित' सभी पॉइंटर्स/इटरेटर की गारंटी देता है वेक्टर में वैध रहेगा, जब तक कि इसकी वर्तमान क्षमता से परे इसका आकार नहीं बदला जाता है (जो एक पुनर्वितरण को मजबूर कर सकता है और इसलिए निहित मूल्यों के पते को स्थानांतरित कर सकता है)। इसने मुझे कुछ बार बचा लिया है, लेकिन हर लगातार समय, मैं 'आरक्षित' करना भूल जाता हूं, और जब तक मुझे याद नहीं आता तब तक मेरे सिर को खरोंच कर लेता है। : डी –