मेरे पास एक vector<vector<double>> elem
है और मैं अपने प्रोग्राम में इसकी मेमोरी को कई बार हटाना चाहता हूं।
मैंने प्रयोग करने की कोशिश की
vector<vector<double>>().swap(elem);
या यहाँ तक कि एक चक्र के लिए
for(int i=0; i<elem.size();i++)
vector<double>().swap(elem[i]);
vector<vector<double>>().swap(elem);
elem.resize(dim, vector<double>(0));
(मैं चाहता हूं कि पहला आयाम एक निश्चित संख्या हो dim
)
लेकिन जब मैं फोन करता हूँ
cout<<elem[0].size();
मेरे कार्यक्रम में कई बार, आउटपुट बढ़ता रहता है, भले ही मैंने उपरोक्त विधि का उपयोग किया हो। यह समस्या वेक्टर के "मुख्य" आकार के साथ मौजूद नहीं है।
अर्थात।
cout<<elem.size();
हमेशा आउटपुट dim
संपादित करें: मुझे स्पष्ट() के बारे में पता है लेकिन मैं वेक्टर को हटाना चाहता हूं, shrink_to_fit() या तो काम नहीं करता है। इसके अलावा यह मुख्य रूप से एक समारोह में कार्यान्वित किया जाता है, जैसा कि निम्नानुसार है:
void arrayReset(vector<vector<double>> elem) {
for(int i=0; i<elem.size();i++)
vector<double>().swap(elem[i]);
vector<vector<double>>().swap(elem);
elem.resize(dim, vector<double>(0));
}
2 जवाब
आपके नए फ़ंक्शन void arrayReset(vector<vector<double>> elem) {
को आपके वेक्टर की कॉपी मिलती है और [संभवतः] इसे साफ़ कर देता है; आप इसे कॉलिंग फ़ंक्शन में कभी नहीं देखते हैं।
यदि आप अपने वेक्टर को संदर्भ से पास करते हैं, तो आप मूल वेक्टर में हेरफेर करेंगे।
वेक्टर के लिए मेमोरी कैसे मुक्त करें
तत्व प्रकार की परवाह किए बिना सभी वैक्टर के लिए तरीका समान है।
चरण 1: वेक्टर के तत्वों को हटा दें। सबसे आसान तरीका है clear
मेंबर फंक्शन। इस चरण के बाद, size
सदस्य फ़ंक्शन 0 वापस आ जाएगा।
चरण 2: shrink_to_fit
सदस्य फ़ंक्शन को कॉल करें जो मेमोरी को हटाने का अनुरोध करता है। इस चरण के बाद, capacity
0 वापस आ सकता है।
तकनीकी रूप से, shrink_to_fit
एक अनुरोध है जिसे भाषा कार्यान्वयन द्वारा सम्मानित करने की आवश्यकता नहीं है। स्मृति को हटाने का एकमात्र गारंटीकृत तरीका वेक्टर को नष्ट करना है। उदाहरण:
{
std::vector<std::vector<double> vector;
// use vector here
}
// memory has been deallocated
मैं अपने कार्यक्रम में कई बार इसकी स्मृति को हटाना चाहता हूं।
ध्यान दें कि यह आमतौर पर कई बार डील नहीं करने से धीमा होता है। मैं यह सुनिश्चित करने की सलाह देता हूं कि आप कुछ ऐसा चाहते हैं जो वास्तव में उपयोगी हो।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।