2

古いレガシー C++ アプリケーションをプロファイリングしています。

vector<class>宣言された varがたくさんあるのを見ました:

vector<someClass> myVec1;
vector<someClass> myVec2;
vector<someClass> myVec3;

このベクトルはかなり大きくなる可能性があります。コードでは、時々それが行われることもわかりました:

myVec2 = myVec1;

この割り当て操作は実際にデータのコピーを作成し、ベクトルがかなり大きい場合、操作は遅くなります。

これらの変数に依存するすべてのコードをリファクタリングする (つまり、それらを動的に割り当てる)ことmyVec2なく、参照のみに割り当てる方法はありますか?myVec1

割り当て後はmyVec1もう使用されないことに注意してください。

4

4 に答える 4

7

を試すことができますmyVec2.swap(myVec1);。これは非常に高速です。もう気にしないのでmyVec1、 の元の内容が含まれているかどうかは問題ではありませんmyVec2

于 2013-05-24T20:25:11.640 に答える
5

次のように参照変数を宣言できます。

vector<someClass> myVec1;
vector<someClass>& myVec2 = myVec1;

ただし、myVec1範囲外myVec2になるとまずい。また、C++11 コンパイラを使用している場合は、ベクトルをコピーする代わりに「移動」できます。

ユースケースを知らずに何をする必要があるかを言うのは難しい.

于 2013-05-24T20:27:59.380 に答える
3

ベクトル変数を再割り当てする必要がない場合は、次のように C++ 参照を使用できます。

vector<someClass> myVec1;
vector<someClass>& myVec2 =  myVec1;

(これは定数ポインターを myVec2 に割り当てるのと同じように機能しますが、「値渡し」変数のセマンティックを保持します)

C++ での参照と考えられる落とし穴の詳細については、こちら を参照してください

于 2013-05-24T20:27:04.080 に答える
0

なぜあなたはしたいですか?を参照する場合myVect1は、名前で参照してくださいmyVect1

ベクターのコピーは非常に便利です。スナップショットとして使用したり、有用な状態のスナップショットから別のベクターを初期化したりできます。

とにかく、数メガバイトのデータをコピーするのはそれほど遅くはありません。最悪でもミリ秒。

于 2013-05-24T20:24:36.957 に答える