我正在使用一个使用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
/changes in 中的参数更改为myVector
inmyFunction
不会损害程序的其余部分:
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。如果我错了,请纠正我!