1. ホーム
  2. c++

[解決済み] データ構造が「押し付けがましい」とはどういう意味か?

2022-06-16 10:37:37

質問

という言葉を目にしたことがあります。 押し付けがましい という用語は、リストやスタックなどのデータ構造を説明するために使われていますが、どのような意味なのでしょうか?

侵入型データ構造のコード例と、侵入型でないデータ構造との違いを教えてください。

また、なぜ侵入型(または、非侵入型)にするのでしょうか?メリットは何ですか?デメリットは何でしょうか?

どのように解決するのですか?

押し付けがましいデータ構造とは、格納しようとする要素を格納するために、その要素からの手助けを必要とするものです。

言い方を変えましょう。そのデータ構造に何かを入れると、その "something"は、何らかの形で、そのデータ構造にあるという事実を認識するようになります。データ構造に要素を追加すると、その要素が変化します。

例えば、各ノードが左と右のサブツリーへの参照と、そのノードの要素値への参照を持っている、非侵入型の二分木を構築することができます。

または、それらのサブツリーへの参照が値自体に埋め込まれている、侵入的なものを構築することもできます。

押し付けがましいデータ構造の例としては、変更可能な要素の順序付きリストがあります。要素が変更された場合、リストは並べ替えられる必要があるため、リストオブジェクトは彼らの協力を得るために要素のプライバシーに侵入しなければなりません。

ORMシステムは通常、オブジェクトの大きなリストに対する反復を最小にするために、侵入的なデータ構造を中心に展開されます。たとえば、データベース内のすべての従業員のリストを取得し、そのうちの 1 人の名前を変更し、それをデータベースに保存する場合、従業員オブジェクトが変更されると、そのオブジェクトがどのリストに含まれているかを知っているため、侵入型の従業員リストが通知されるでしょう。

非侵入型リストには通知されず、何がどのように変更されたかを自分で把握する必要があります。