クラスのプライベートメンバーであるV
タイプのベクトルが呼び出されたとします。vector<int>
クラスのこのパブリック関数もあります。
vector<int> getV(){ return V; }
このクラスのインスタンスがあり、値を読み取ってベクトル内のすべての値の合計を見つけるだけでよい場合、
次のように言えます。
MyClass obj;
//update vector
size_t i, size;
size = obj.getV().size();
int sum = 0;
for(size_t i = 0; i < size; i++){
sum += obj.getV().at(i);
}
または、次のように言うこともできます。
MyClass obj;
//update vector
size_t i, size;
vector<int> myV = obj.getV();
size = myV.size();
int sum = 0;
for(size_t i = 0; i < size; i++){
sum += myV[i];
}
2 番目のケースでは、ベクトル全体を vector にコピーしますmyV
。ただし、最初のケースで正確に何が起こるかはわかりません。ベクトルをそのまま使用しますか、それとも関数を呼び出すたびに実際にベクトルをコピーしますgetV()
か?
コピーが発生しない場合は、最初のバージョンの方が効率的だと思います。
しかし、私は正確に何が起こっているのか 100% ではありません。
vector への参照を返せば、コピーをまったく避けることができると思いV
ます。したがって、次の関数を使用できます。
vector<int>* getV { return &V; }
その後
MyClass obj;
//update vector
size_t i, size;
vector<int> * myV = obj.getV();
size = myV->size();
int sum = 0;
for(size_t i = 0; i < size; i++){
sum += myV->at(i);
}
ただし、最初のケースで正確に何が起こっているのか知りたいです。コピーされているものはありますか?3 番目のケースでもポインタを返すため、何らかのコピーが発生しています。
前もって感謝します