モバイルC ++ 0511ベクトル

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/baiyibin0530/article/details/90105331

コピー代入

私たちは(初期化)はコンストラクタでオブジェクトをコピーすることができますが、我々はまた、譲渡の方法でベクトルをコピーすることができます。

用語&コピー

<<オブジェクトは、入力オペレータした後、オブジェクトの矢印側吸気量の大部分を取得することで、矢印と呼ばれる操作を返します

モバイル

ベクターフィル(のIStream&ある)
{
    ベクトルRES。
    以下のためres.push_back(x)は(ダブルX; >> xがあります)。
    解像度を返します。
}

ボイド使用()
{
    ベクトルVEC =埋める(CIN)。
}

Vectorクラス
{
    int型SZ、
    ダブルELEMの*;
公共:
    ベクター(ベクター&& A); //コンストラクタ動き
    ベクトル&演算子=(ベクトル&&) ; // 移動割り当て
    // ...
}

知られているファニー&&記号「右辺値参照を。」私たちは、移動操作を定義するためにそれを使用します。なお、移動操作が接続されていない
パラメータCONSTによって、すなわち、我々は代わりに(ベクトル&&)(CONSTベクトルを&&)を使用しなければなりません。
移動操作の目的の一つは、それがなるように、ソースオブジェクトを変更することである「空」。それは必要以上簡単であるべき操作を動かす定義し
、より効率的でコピー操作に対応した簡単です。

::ベクトルのベクトル(ベクトル&& A)
    :SZのa.sz {}、{} ELEM ELEMとSZの// a.elemコピー
{
    a.sz = 0; //空のベクターなる作る
    a.elem = nullptr A ;
}

ベクトル・ベクトル::演算子=(ベクトル && A)// ベクトルに提示する移動
{
    [] ELEMを削除; //古い空間放出
    ELEM = a.elemを; // ELEMのコピーとSZ
    AZ = a.sz。
    .ELEM = nullptr; //は空のベクトルになり作る
    a.sz = 0;
    //自己参照を返します。*これを返します
}

ベクター(のIStream&IS)充填
{
    ベクトルRESを、
    ため(ダブルX; Xは>>;)res.push_back(X)、
    RESを返す;
}
暗黙的に戻さ実装するために使用される移動コンストラクタ関数。コンパイラが去るために、ローカル値(RES)を返すために知っている
ことは、それをコピーしない値の外に移動することができますので、その範囲を。

コンストラクタを動かすことの重要性は、我々が処理関数ポインタまたは参照から大量の情報を返却する必要がないことです。
このような欠陥のある次の選択肢:
ベクトル* fill2(はistream&IS)
{
   新しい新しいベクターvecotor * RES =;
    RES->一back(X);(;; Xは、IS >>ダブルX)のための
    RESを返します;
}

ボイドuse2()
{
    ベクトルVEC * =フィル(CIN)。
    // ...
}

この方法を使用するとき、我々はベクトルを解放するために覚えておく必要があります。空き領域の解放上のオブジェクト、それは一貫性と正確性を達成するために見た目ほど簡単ではありません。


 

おすすめ

転載: blog.csdn.net/baiyibin0530/article/details/90105331