STL構造


1.STLの構成
STLは6つの主要コンポーネントから構成されている.
-コンテナ、アルゴリズム、反復器は最も重要な3つの要素です.
-関数オブジェクトはアルゴリズムの可用性を向上させることができます.
-深度マップは、他の要素を少し修正することでシェイプを変更します.
-ディスペンサはコンテナメモリを管理するオブジェクトであり、作成が非常に良いため、ほとんど心配する必要はありません.
2.コンテナ
コンテナはバケツ、ボウルです.
-名前の通り、容器は何かを格納する役割を果たしています.
-STLのコンテナは、同じタイプのオブジェクトのセットを格納および管理するために使用されます.
-配列、接続リスト、スタックコンテナの例
-整数または実数などの基本タイプだけでなく、クラス内のオブジェクトまたはその誘導タイプも格納されます.
コンテナの種類
1.シーケンスコンテナ
- 자료의 선형적인 집합이며 자료를 저장하는 기본 임무에 충실한 가장 일반적인 컨테이너.
- 삽입된 자료를 무조건 저장하며 입력되는 자료에 특별한 제약이나 관리 규칙이 없음.
- 시퀀스의 임의 위치에 원하는 요소를 마음대로 삽입, 삭제할 수 있음.
- STL은 벡터, 리스트, 덱 세 가지의 시퀀스 컨테이너를 제공함.
2.関連コンテナ
- 자료를 무조건 저장하기만 하는 것이 아니라 일정한 규칙에 따라 자료를 조직화하여 관리하는 컨테이너.
- 정렬이나 해시 등의 방법을 통해 삽입되는 자료를 항상 일정한 기준(오름차순, 해시함수)에 맞는 위치에 저장하므로 검색 속도가 빠름
- STL은 셋, 맵 등의 정렬 연관 컨테이너를 제공함.
3.アダプタ容器
- 시퀀스 컨테이너를 변형하여 자료를 미리 정해진 일정한 방식에 따라 관리하는 컨테이너
- 자료를 푸시, 팝하는 순서를 외부에서 마음대로 조작할 수 없고 컨테이너의 규칙대로 조작해야 함.
- STL은 스택, 큐, 우선 순위 큐 세 가지를 제공함.
3つのコンテナの挿入と削除のルールに違いがあります.
-シーケンスコンテナは、挿入および削除に特別な制約はありません.
- 연관 컨테이너는 신속한 검색을 위해 찾기 좋은 위치에 자동 삽입됨.
- 어뎁터 컨테이너는 FIFO, LIFO 등의 미리 정한 규칙의 통제를 따름.
どの容器にもメリットとデメリットがあります
すべての場合、最適な理想的な容器は存在しません.
3.ベクトル
ベクトルは単純に動的配列である.
要素の数に応じてメモリを自動的に再割り当てできる伸縮性のあるアレイ
-単純なダイナミックアレイとは異なり、テンプレートベースのアレイの最大の利点は、要素タイプに関係のないアレイを作成できることです.
   ![vector](http://www.soen.kr/lecture/ccpp/cpp4/37-2-1.files/image004.gif) - vector<int>까지가 하나의 클래스 이름 
- ar은 지금 선언하고자 하는 객체 
- (5)는 이 클래스의 생성자로 전달되는 인수
ベクトルには多くのメンバー関数と演算子があります
-配列内の要素を読み込む[]演算子を定義します.これには、サイズを取得する関数、要素を追加する関数、要素を削除する関数が含まれます.
-破壊者は自動的に配列の動的割り当てを解除します
ベクトルは、隣接するメモリに要素を連続的に格納します.
-必要な要素の読み取りと書き込みを高速化するには、単純なスパイク演算を使用します.
-任意の要素に移動する操作を一定時間実行できます.
-読み取り速度が速く、ソートや二分検索などのアルゴリズムに非常に有効です.
-ランダム・アクセスを実現するには、要素が常にメモリ内に存在する必要があります.
-メモリの挿入と削除を中間で行う場合は、プッシュ処理が必要なため、挿入と削除の速度が遅くなります.
4.明細書
二重接続リストを含むコンテナ.
-リスト内の要素は、ノードと呼ばれる構造体によって管理されます.
-ノード間をリンクして接続し、要素の論理順序を記憶します.
- 노드는 링크에 의해 연결되어 있으므로 벡터처럼 인접한 메모리에 배치될 필요가 없음.
- 삽입, 삭제 시 앞뒤 노드의 링크만 조작하므로 대용량의 메모리를 밀고 당깅 필요가 없음.
- 그러므로 삽입, 삭제 속도가 매우 빠름.
- 하지만 검색은 첫 노드부터 순서대로 링크를 따라 이동해야 하므로 매우 느리다.
同じグループの資料を管理する上で,ベクトルと用途は同じであるが,内部の違いによって異なる特徴を持つ.
-リストは挿入と削除が得意です.
-ベクトルの読み書き能力が高い.
リストの宣言形式は次のとおりです.
- list<T> Name
- 탬플릿 인수로 요소의 타입 T를 전달하며 생성자의 인수는 없음.
- 리스트는 빈 상태로 만들어도 빠른 속도로 삽입, 삭제를 할 수 있으므로 일반적으로 빈 상태로 생성함.
リストは一定時間前後に挿入および削除でき、非常に高速です.
-これに対して、ベクトルはアレイの最後に追加および削除することができます.(push front,pop front関数は存在しません)
     ![list](http://soen.kr/lecture/ccpp/cpp4/37-2-1.files/image006.gif)
中間挿入、削除時にinsert、eraseメンバー関数を使用します.
リンクのみを処理するため、挿入位置を考慮することなく、常に一定時間で完了できます.
5.地図
マッピングは、2つのペアのデータを格納するコンテナです.
-シーケンスコンテナとは異なる位置に、関連コンテナの1つであるマッピングを挿入します.
- 항상 정렬된 상태로 관리되므로 이분 탐색 기법을 사용할 수 있으며 요소가 아무리 많아도 굉장히 빠르게 검색할 수 있음.
- 대량의 데이터를 신속하게 검색해야 할 필요가 있을 때 맵이 주로 사용.
出典:SoEnソフトウェアエンジニアリング研究所
  • http://soen.kr/lecture/ccpp/cpp4/37-1-2.ht