私は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の引数を in に変更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 です。間違っている場合は修正してください!