O(1)時間でC ++ベクトルに新しい値を割り当てることは可能ですか?

扁平足

次の手順で次のPythonプログラムを検討してください。

1)2つのリストAとBが初期化されます。

2)A = Bを割り当てます。この操作の時間計算量はO(1)です。

3)Aを変更しない新しいリストをBに割り当てます。

A = [1, 2, 3]
B = [7, 8]
# A contains [1, 2, 3]
# B contains [7, 8]

#------------------------------------

A = B
# A contains [7, 8]
# B contains [7, 8]
# time complexity: O(1)

#------------------------------------

B = [55, 66, 77, 88]
# A still contains [7, 8]
# B now contains [55, 66, 77, 88]

ここで、AとBがベクトルであるC ++で同様のことを実行したいと思います。

1)2つのベクトルAとBが初期化されます。

2)A = Bを割り当てます。en.cppreference.comによると、この操作の時間計算量はO(n)です

3)Aを変更しない新しいリストをBに割り当てます。

vector<int> A = {1, 2, 3};
vector<int> B = {7, 8};
// A contains [1, 2, 3]
// B contains [7, 8]


A = B;   
// A contains [7, 8]
// B contains [7, 8]
// time complexity: O(n)


B = {55, 66, 77, 88};
// A still contains [7, 8]
// B now contains [55, 66, 77, 88]

私の質問

PythonプログラムとC ++プログラムの違いは、A = Bを割り当てるステップ2)の時間計算量です。

  • Pythonでは、参照を変更するだけなので、O(1)の時間がかかります。A then 'は' Bを指します。つまり、AとBは両方とも同じオブジェクトへの参照です。
  • C ++では、BのコンテンツがAにコピーされるため、O(n)時間がかかります。AはBと同じオブジェクトを「指しません」。

C ++のベクトルAがO(1)時間のベクトルBを指すようにする方法はありますか?

注:私はC ++にあまり詳しくないため、AとBをC ++のベクターオブジェクトへの参照と見なすことが有効かどうかさえわかりません。

Bに割り当てた後の値を使用しないためA(後で直接割り当てる)、C ++ 11の移動セマンティクスを利用できます。

vector<int> A = {1, 2, 3};
vector<int> B = {7, 8};
A = std::move(B);
// O(1), see below
// B is in indeterminate but usable state now (probably empty).

B = {55, 66, 77, 88};
// A still contains [7, 8]
// B now contains [55, 66, 77, 88]

ムーブ代入演算子の時間計算量は次のとおりです。

std::allocator_traits<allocator_type>::propagate_on_container_move_assignment()isfalseない限り定数あり、アロケータは等しく比較されません(この場合は線形)。

ソース

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

pygame.Rectオブジェクトに割り当て可能な新しい属性を作成することは可能ですか?

分類Dev

右辺値ベクトルをヒープに割り当てることはできますか?

分類Dev

新しいVecを割り当てずに、Vec上に関数をマップすることは可能ですか?

分類Dev

ベクトルから別の変数に整数値を割り当てることがRustで許可されているのはなぜですか?

分類Dev

開梱時にデフォルト値を割り当てることは可能ですか?

分類Dev

別のオブジェクトを破壊しているときにオブジェクトを割り当てることは可能ですか(破壊時にデフォルトを使用している間)

分類Dev

Rails 5.2ルートを使用して列挙値を割り当てることは可能ですか?

分類Dev

wchar_t *文字列を新しい文字列としてベクトルにコピーすることは可能ですか?

分類Dev

NuoDBですでに宣言されている変数に値を割り当てることは可能ですか?

分類Dev

promiseベースのネストされた配列オブジェクトに新しいキー値を割り当てることができないのはなぜですか?

分類Dev

新しいベクトルを割り当てるときのstd :: bad_alloc-何ができますか

分類Dev

magrittrパイプラインのベクトルに変数名を動的に割り当てることは可能ですか?

分類Dev

Javaで列挙型に数値を割り当てることは可能ですか?

分類Dev

連結されたタプルに新しい値を割り当てることができるのはなぜですか?

分類Dev

Pythonでは、変数に新しい値を割り当てると、古い値はどうなりますか?

分類Dev

怠惰な静的な値を参照してベクトルを作成することは可能ですか?

分類Dev

charポインタをfloat値に割り当てることは可能ですか?

分類Dev

C規格では、ポインタに任意の値を割り当ててインクリメントすることを許可していますか?

分類Dev

Eloquent ORMとpostgresの移行 - 式のデフォルト値を割り当てることは可能ですか?

分類Dev

リストに値を追加することと割り当てることの違いは何ですか?

分類Dev

data.tableを使用して、グループ内の最初のX値を繰り返すことで新しい列を作成することは可能ですか?

分類Dev

ベクトル内のベクトルの配列を割り当てるときに角かっこを使用するのはなぜですか?

分類Dev

匿名クラスの代わりにLambdaを使用して新しいオブジェクトを作成することは可能ですか?

分類Dev

オブジェクトを作成し、それを変数に割り当て、変数を1行でリストに追加することは可能ですか?

分類Dev

オブジェクトを割り当てることと、オブジェクトに値を設定することの違いは何ですか

分類Dev

メソッドが新しい値を別のクラスに正しく割り当てることをユニットテストするにはどうすればよいですか?

分類Dev

オブジェクトを作成するときにconst変数に値を割り当てることは可能ですか?

分類Dev

calloc()を1回使用して、cに2次元配列を動的に割り当てることは可能ですか?

分類Dev

永続オブジェクトを割り当てることは可能ですか?

Related 関連記事

  1. 1

    pygame.Rectオブジェクトに割り当て可能な新しい属性を作成することは可能ですか?

  2. 2

    右辺値ベクトルをヒープに割り当てることはできますか?

  3. 3

    新しいVecを割り当てずに、Vec上に関数をマップすることは可能ですか?

  4. 4

    ベクトルから別の変数に整数値を割り当てることがRustで許可されているのはなぜですか?

  5. 5

    開梱時にデフォルト値を割り当てることは可能ですか?

  6. 6

    別のオブジェクトを破壊しているときにオブジェクトを割り当てることは可能ですか(破壊時にデフォルトを使用している間)

  7. 7

    Rails 5.2ルートを使用して列挙値を割り当てることは可能ですか?

  8. 8

    wchar_t *文字列を新しい文字列としてベクトルにコピーすることは可能ですか?

  9. 9

    NuoDBですでに宣言されている変数に値を割り当てることは可能ですか?

  10. 10

    promiseベースのネストされた配列オブジェクトに新しいキー値を割り当てることができないのはなぜですか?

  11. 11

    新しいベクトルを割り当てるときのstd :: bad_alloc-何ができますか

  12. 12

    magrittrパイプラインのベクトルに変数名を動的に割り当てることは可能ですか?

  13. 13

    Javaで列挙型に数値を割り当てることは可能ですか?

  14. 14

    連結されたタプルに新しい値を割り当てることができるのはなぜですか?

  15. 15

    Pythonでは、変数に新しい値を割り当てると、古い値はどうなりますか?

  16. 16

    怠惰な静的な値を参照してベクトルを作成することは可能ですか?

  17. 17

    charポインタをfloat値に割り当てることは可能ですか?

  18. 18

    C規格では、ポインタに任意の値を割り当ててインクリメントすることを許可していますか?

  19. 19

    Eloquent ORMとpostgresの移行 - 式のデフォルト値を割り当てることは可能ですか?

  20. 20

    リストに値を追加することと割り当てることの違いは何ですか?

  21. 21

    data.tableを使用して、グループ内の最初のX値を繰り返すことで新しい列を作成することは可能ですか?

  22. 22

    ベクトル内のベクトルの配列を割り当てるときに角かっこを使用するのはなぜですか?

  23. 23

    匿名クラスの代わりにLambdaを使用して新しいオブジェクトを作成することは可能ですか?

  24. 24

    オブジェクトを作成し、それを変数に割り当て、変数を1行でリストに追加することは可能ですか?

  25. 25

    オブジェクトを割り当てることと、オブジェクトに値を設定することの違いは何ですか

  26. 26

    メソッドが新しい値を別のクラスに正しく割り当てることをユニットテストするにはどうすればよいですか?

  27. 27

    オブジェクトを作成するときにconst変数に値を割り当てることは可能ですか?

  28. 28

    calloc()を1回使用して、cに2次元配列を動的に割り当てることは可能ですか?

  29. 29

    永続オブジェクトを割り当てることは可能ですか?

ホットタグ

アーカイブ