2013-11-01 14 views
5

vectorlistおよび他のコンテナと同様に)はメンバ関数(MF)assignを持っています。 assign MF(レンジバージョン)と代入演算子を比較したいと思います。私の知る限り、ときassignを使用すると便利であることを理解としてSTL - 代入演算子対代入メンバ関数

  1. 一つは(ない最初から最後まで)ベクトルのサブ範囲を割り当てることを望んでいます。
  2. 割り当ては配列から行われます。

他の場合には、assign MFには反対ではなく、代入演算子を使用することもできる。 私はそうですか? assign MFを使用するいくつかの理由はありますか?

+2

割り当てのための別の* pro *は、移動割り当て演算子です。右辺値を割り当てると、右辺値はコピーされたものから移動されます。 – jrok

+1

'assign 'という小さなコードは、他の誰かがあなたのコードを読み込むのが、等号だけではなく直感的ですが、それはちょっとした問題です。 –

答えて

7

assignを使用する主な理由は、あるタイプのコンテナから別のタイプのコンテナにデータをコピーすることです。例えば

あなたはstd::vector<int>std::set<int>の内容を移行したい場合、あなたは、代入演算子を使用することはできませんが、vector.assign(set.begin(), set.end())を使用することができます。

もう1つの例は、変換可能な異なるタイプを保持する2つのコンテナの内容を一方または他方にコピーすることです。 std::vector<Derived*>std::vector<Base*>に割り当てようとすると、代入演算子が不十分です。

+0

'vector = std :: vector (set.begin()、set.end())'などもやっているので、 'assign'は完全に冗長です。 – emlai

+0

@emlai 'assign'は完全に新しいベクトルを割り当てる代わりに容量を再利用したい場合に便利です。 – TemplateRex

関連する問題