我正在使用一個使用std::vector
很多的程序。還有很多分配/釋放,其中有數十億分配,我儘量避免儘可能多的分配/釋放。 因爲我對C++比較陌生,所以在使用向量時(例如向它添加元素時),我有幾個關於分配的問題。 我在Win7 64位機器上,程序是32位的,我使用MinGW編譯器的當前版本。何時複製矢量,什麼時候通過了參考?
我想知道,什麼發生在下列情況下,即如果矢量被複制,作爲引用傳遞,...
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
/變化中myVector
在myFunction
止跌不傷害節目的其餘部分:
6.
void myFunction(std::vector<T> myParam) {
...
}
std::vector<T> myVector;
... (myVector being filled)
myFunction(myVector);
void myFunction(std::vector<T>& myParam) {
...
}
std::vector<T> myVector;
... (myVector being filled)
myFunction(myVector);
如果我的理解是正確的,最快的選項(意味着通過引用而不是創建副本,並通過他們的)會是2/3,5和7,請糾正我,如果我錯了!
最快和最乾淨的是選項1. – juanchopanza 2013-02-27 19:09:59