8

私は受け入れる機能を持っています

vector<vector<MyClass>> 

MyClass インスタンスを変更します。C++ を書いてから長い時間が経ちましたが、ここで引数全体を値ではなく参照で渡すのに十分なものを思い出すのに苦労しています。

私の元のメソッド署名は次のとおりです。

void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... }

このメモリを効率的にしたいので、もともとこれを次のように変更しました。

void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... }

その後、これは私の vec 値がすべての内部ベクトルのコピーを作成することを意味することに気付きました。そこで、関数の署名を次のように変更しました。

void modifyVectorOfVectors(vector<vector<MyClass*> >* vec) { ... }

これで十分ですか、それとも次のようなこともする必要がありますか?

void modifyVectorOfVectors(vector<vector<MyClass*>* >* vec) { ... }

誰かがこれらすべてのメモリの違いを強調できますか? どうもありがとう!

4

2 に答える 2

17

単に

void modifyVectorOfVectors( vector< vector< MyClass > >& vec) { ... }
于 2015-05-25T20:00:52.850 に答える
3
  1. void modifyVectorOfVectors(vector<vector<MyClass> > vec) { ... } 内部ベクトルのすべての要素を持つ外部ベクトルをコピーします
  2. void modifyVectorOfVectors(vector<vector<MyClass*> > vec) { ... } MyClass のすべてのポインターを保持するすべての内部ベクトルを持つ外部ベクトルをコピーします
  3. void modifyVectorOfVectors(vector<vector<MyClass*>* > vec) { ... } 内部ベクトルのすべてのポインターを持つ外部ベクトルをコピーし、内部ベクトルは MyClass のポインターを保持します
  4. void modifyVectorOfVectors(vector<vector<MyClass*> *> vec*) { ... } 内部ベクトルのすべてのポインターを持ち、内部ベクトルが MyClass のポインターを保持する外部ベクトルのコピー ポインター
于 2015-05-25T20:00:35.290 に答える