30.1 概要
/* STLの3要素 */
STLの3つの基本要素
コンテナ
反復子(イテレータ)
アルゴリズム
【アルゴリズム】⇔【反復子】⇔【コンテナ】
⇔【メンバ関数】
/* 反復子とは */
int i, dt[5] = { 10, 11, 12, 13, 14 };
for(i = 0; i < 5; i++) {
cout << dt[i] << 'n';
}
この反復処理はポインタで行なうこともできます。
int dt[5] = { 10, 11, 12, 13, 14 };
int *p, *p_end = dt + 5;
for (p = dt; p<p_end; p++) {
cout << *p << 'n';
}
/* STLの分類 */
【列コンテナ】
vector 配列を動的に管理する
deque 先頭と末尾で挿入/削除ができる両頭キュー管理をする
list 1次元の双方向リスト構造の管理をする
【連想コンテナ】
map 連想配列。キーとデータの対応管理をする
multimap 重複キーを許すmap
set 要素の組み合わせ管理を行なう
multiset 重複値を許すset
【ビットセット】
bitset ビットを管理
【コンテナアダプタ】
stack スタック管理を行なう(LIFO:後入れ先出し)
queue 標準キューの管理を行なう(FIFO:先入れ先出し)
priority_queue 優先順位機能付きキュー管理を行なう
/* STL用ヘッダ */
省略(適宜参照)
/* 簡単なSTLプログラム */
30.2 コンテナのメンバ関数
省略(適宜参照)
30.3 反復子
/* 反復子の宣言 */
反復子宣言
container<TYPE>::iterator名 反復子名;
iterator名
iterator // 標準の反復子
reverse_iterator // 逆進反復子
const_iterator // const反復子
const_reverse_iterator // const逆進反復子
/* 反復子のカテゴリ */
省略
/* 反復子の演算 */
省略
/* 反復子の互換性 */
省略
/* 反復子の範囲表現 */
一対の反復子で範囲を示すという基本用法があります。
v.erase(p1, p2);
30.4 vector
/* 概要 */
/* vectorの宣言と初期化 */
/* vectorの機能 */
/* コンテナにコンテナを格納 */
30.5 list
/* 概要 */
省略
/* listの機能 */
30.6 deque
/* 概要 */
省略
/* dequeの機能 */
30.7 map
/* 概要 */
省略
/* mapコンテナの宣言 */
省略
/* pairクラスとmake_pairクラス */
省略
/* mapコンテナの初期化 */
省略
/* 反復子によるメンバ指定 */
省略
/* 連想配列の用法 */
省略
/* mapの機能 */
/* 関数オブジェクトの指定 */
#include <iostream>
typedef map<string, int, greater<string> > Mymap; // 降順ソート型
int main()
{
Mymap m; // 降順ソートをするオブジェクト
Mymap::iterator p; // 反復子
}
/* 関数オブジェクトの自作 */
省略
30.8 set
/* 概要 */
省略
/* setの機能 */
30.9 stack
/* 概要 */
省略
/* stackの機能 */
30.10 queue
/* 概要 */
省略
/* queueの機能 */
30.11 priority_queue
/* 概要 */
priority_queue<int> qt1;
priority_queue<int, vector<int>, greater<int> qt2;
/* priority_queueの機能 */
30.12 bitset
/* 概要 */
省略
/* bitsetの機能 */