मेरे पास एक 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));
}
0
user13884402 15 सितंबर 2020, 00:15

2 जवाब

सबसे बढ़िया उत्तर

आपके नए फ़ंक्शन void arrayReset(vector<vector<double>> elem) { को आपके वेक्टर की कॉपी मिलती है और [संभवतः] इसे साफ़ कर देता है; आप इसे कॉलिंग फ़ंक्शन में कभी नहीं देखते हैं।

यदि आप अपने वेक्टर को संदर्भ से पास करते हैं, तो आप मूल वेक्टर में हेरफेर करेंगे।

1
Vlad Feinstein 15 सितंबर 2020, 00:36

वेक्टर के लिए मेमोरी कैसे मुक्त करें

तत्व प्रकार की परवाह किए बिना सभी वैक्टर के लिए तरीका समान है।

चरण 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

मैं अपने कार्यक्रम में कई बार इसकी स्मृति को हटाना चाहता हूं।

ध्यान दें कि यह आमतौर पर कई बार डील नहीं करने से धीमा होता है। मैं यह सुनिश्चित करने की सलाह देता हूं कि आप कुछ ऐसा चाहते हैं जो वास्तव में उपयोगी हो।

1
eerorika 15 सितंबर 2020, 00:22