मैं ऐसे प्रोग्राम के साथ काम कर रहा हूं जो std::vector
का उपयोग करता है। इसके अलावा बहुत सारे आवंटन/विलोपन होते हैं, उनमें से अरबों, और मैं जितना संभव हो उतना से बचने की कोशिश कर रहा हूं। चूंकि मैं सी ++ के लिए अपेक्षाकृत नया हूं, मेरे पास वेक्टर का उपयोग करते समय आवंटन के संबंध में कुछ प्रश्न हैं (उदाहरण के लिए तत्व जोड़ते समय)। मैं Win7 64-बिट मशीन पर हूं, प्रोग्राम 32-बिट है और मैं MinGW-compilers के वर्तमान संस्करण का उपयोग कर रहा हूं।एक वेक्टर कॉपी कब किया जाता है, एक संदर्भ कब पास किया जाता है?
मुझे पता करना चाहते हैं, क्या निम्नलिखित मामलों में होता है, यानी वेक्टर नकल की जाती है, तो, एक संदर्भ के रूप पारित कर दिया, ...
1.
std::vector<T> fillVector() {
std::vector<T> returnVector;
...
return returnVector;
}
std::vector<T> myVector = fillVector();
2.
std::vector<T>& fillVector() {
std::vector<T>* returnVector = new std::vector<T>;
...
return (*returnVector);
}
std::vector<T> myVector = fillVector();
3.
std::vector<T>* fillVector() {
std::vector<T>* returnVector = new std::vector<T>;
...
return returnVector;
}
std::vector<T>* myVector = fillVector();
और निम्न, विभिन्न कार्यों:
4.
std::vector<T> myVector1;
... (myVector1 being filled)
std::vector<T> myVector = myVector1;
5.
std::vector<T>* myVector1 = new std::vector<T>;
... (myVector1 being filled)
std::vector<T> myVector = (*myVector1);
मान लिया जाये कि मैं myFunction
wouldn में myVector
में myFunction
/परिवर्तन में तर्क को बदलने के लिए नहीं करना चाहते हैं बाकी कार्यक्रम को चोट नहीं पहुंचा:
6.
void myFunction(std::vector<T> myParam) {
...
}
std::vector<T> myVector;
... (myVector being filled)
myFunction(myVector);
7.
void myFunction(std::vector<T>& myParam) {
...
}
std::vector<T> myVector;
... (myVector being filled)
myFunction(myVector);
तो मेरी समझ सही है, तो सबसे तेजी से विकल्प (गुजर संदर्भ अर्थ प्रतियां बनाने और उन्हें पारित करने के बजाय) होगा 2/3, 5 और 7 कृपया मुझे अगर सही कर मैं गलत हूँ!
सबसे तेज़ और साफ विकल्प 1 है। – juanchopanza