मेरे पास एक बहुत बड़ा बहुआयामी वेक्टर है जो हर समय आकार में बदलता है। क्या vector.reserve() फ़ंक्शन का उपयोग करने के लिए कोई बिंदु है जब मुझे केवल आकारों का अच्छा अनुमान पता है।वेक्टर रिजर्व सी ++
तो बुनियादी तौर पर मैं एक वेक्टर
A[256*256][x][y]
जहां एक्स 0 से 50 के कार्यक्रम में हर यात्रा के लिए वापस 0 करने के लिए फिर से चला जाता है और उसके बाद की है। Y मान हर बार भिन्न हो सकते हैं, जिसका अर्थ है कि प्रत्येक [256*256][y]
तत्वों के लिए वेक्टर वाई एक अलग आकार का हो सकता है लेकिन 256 से भी छोटा हो सकता है;
तो मेरी समस्या स्पष्ट करने के लिए इस मैं क्या है:
vector<vector<vector<int>>> A;
for(int i =0;i<256*256;i++){
A.push_back(vector<vector<int>>());
A[i].push_back(vector<int>());
A[i][0].push_back(SOME_VALUE);
}
वेक्टर के तत्वों को शामिल करें ...
A.clear();
और इस के बाद मैं ऊपर से फिर से एक ही बात करते हैं।
मैं और कैसे वैक्टरों के लिए स्थान आरक्षित करना चाहिए। यदि मैं इसे सही ढंग से समझ गया हूं तो मैं बहुत समय बचाऊंगा यदि मैं रिजर्व का उपयोग करता हूं क्योंकि मैं हर समय आकार बदलता हूं?
कुछ मामलों में मेरे वेक्टर के अधिकतम आकार को आरक्षित करने के नकारात्मक/सकारात्मक पक्ष क्या होंगे जो कुछ मामलों में [256*256][50][256]
होगा।
बीटीडब्ल्यू। मैं अलग मैट्रिक्स टेम्पलेट्स और बूस्ट के बारे में पता है, लेकिन इस पर वैक्टर के साथ जाने का फैसला किया है ...
संपादित करें: मैं भी कैसे बहुआयामी सरणियों में आरक्षित समारोह का उपयोग करने के सोच रहा था। यदि मैं केवल दो आयामों में वेक्टर को आरक्षित करता हूं तो क्या यह पूरी चीज की प्रतिलिपि करेगा यदि मैं तीसरी आयाम में अपनी क्षमता को पार करता हूं?
256 * 256 * 50 * 256 * 4 == 3.5 जीबी। क्या यह वाकई सही है? – Will
मुझे डर है कि यह है! लेकिन यह अधिकतम आकार है ... शायद यह 256 * 256 * 50 * 100 की तरह कुछ होगा; तकनीकी रूप से अधिकतम मूल्य कभी पूरा नहीं होगा ... –