11

コンテナとは?私が理解しているように:

  • 抽象データ型は、データが格納される方法とそのデータに対して許可される操作の単なる論理的な記述です。たとえば、スタックは、プッシュ、ポップなどの操作と LIFO アクセスを含むデータ型として定義されます。

  • データ構造は、この抽象的な定義の実際の実装です。一部のコンピューター プログラミング言語では、たとえば、C++ のスタックは std::stack として標準ライブラリに実装されます。

まず、前述の区別についての私の現在の理解を修正/強化してください。

第二に、コンテナとは正確には何ですか?この言葉をよく耳にします。私のデータ構造の定義と同じですか?

また、ウィキペディアには、これらの用語について 3 つの個別のエントリがあります。

4

4 に答える 4

2

本当に何もありません。私たち人間が好むように、これらは同じ用語を表す 2 つの単語にすぎません。ただし、公式の CS 用語はデータ構造であり、C++ 標準にはコンテナーに関する特定の C++ 要件があります。ただし、一般的には同等です。

于 2012-06-27T01:19:41.247 に答える
1

コンテナはデータ構造のサブセットです。C++ は、さまざまなデータ構造の実装であるコンテナーに特別な要件を課します。

データ構造は、ウィキペディアによると、「データを保存および整理する特定の方法」です。コンテナーは、レコードのコレクションである C++ 構造であり、それ自体がデータ構造です。

于 2012-06-27T01:37:05.987 に答える
1

ADT とデータ構造の印象は正しいですが、かなりの部分で互換性があります。ADT は明示的に抽象的であり、データ構造はより一般的な用語であり、完全に抽象的であるか、実装の詳細を参照することもできます。

コンテナーは非常に抽象的な概念ですが、一般的に (私にとっては) なんらかの形のカプセル化を意味します。これは、基になるオブジェクトの複雑さを覆い隠したり、さまざまな可能性のある基になるさまざまなオブジェクトへの統一されたインターフェイスを提示したりする可能性があるという意味でです。これは、プログラマーの語彙にしっかりと根付いているため、人々が常に使用する単語であるため、その意味は非常に曖昧です。;)

于 2012-06-27T01:26:45.927 に答える
1

他の方もおっしゃっているように、これらの用語は非常に広く使われており、さまざまな意味で使用されていますが、私が最もよく遭遇する使用法を以下に示します。

データ構造はコンピュータ サイエンスの用語であり、特定の言語を参照せずに理論的な議論で使用できます。キュー、ツリー、ハッシュテーブルなど、アルゴリズムに関する本で議論されているデータ構造は数多くあります。データ構造は、実質的にどの言語でも実装できます。

コンテナーは、プログラマーがすぐに使用できる、既に実装されているコンテナーの利用可能なライブラリーがある場合に、特定の言語の文脈で使用される用語です。いくつかの別個のライブラリは、同じ (抽象) データ構造 (たとえば、単純にリンクされたリスト) を実装できますが、別個のコンテナー、つまり、別個のソース コードと別個の名前 (1 つは "queue"、もう 1 つは "fifo"、および3 番目の「スタック」)。

さらに、コンテナーは、他のタイプを格納する方法である必要があります (例: ベクター ストア int)。例として、メモリ内のグラフを表現する方法はいくつかあります: 隣接行列、隣接リスト、フォワード スター... これらはすべてデータ構造ですが、他の型を含まないためコンテナーではありません。グラフのノードとリンクを表します。これらのデータ構造によって格納されるデータは、ノードとリンクです。

于 2012-06-27T14:56:56.867 に答える