前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0

15.1. コレクション クラス

コレクション クラスは、可変長配列、スタック、リスト、ハッシュ マップの 4 種類があります。

複数の要素の集まり(コレクション)に対して、要素を追加・更新・削除・検索するには、コレクション クラスを利用します。

表 15.1. コレクション クラス

クラス名 解説
SFXArray 可変長配列を操作するためのデータ構造です。
SFXStack スタックを操作するためのデータ構造です。
SFXList 双方向のリストを操作するためのデータ構造です。
SFXHashmap 要素がキーと値から構成されるハッシュ マップを操作するデータ構造です。
[Caution] コレクション クラスの制限

コレクション クラスには、 4 バイト以下の要素しか格納できません。4 バイトよりも大きなインスタンス等はそのポインターを格納します。

参照:クラス インスタンスの格納

15.1.1. 可変長配列クラス

SFXArray は多数の要素を順に格納するのに適したデータ構造です。

例 15.1. 定義

// SInt32 を格納する可変長配列 ( SFXArray ) の定義
SFXArray<SInt32> array;

例 15.2. 要素の追加

array.InsertLast(3);
array.InsertLast(-15);
array.InsertLast(0);
array.InsertLast(1003);

// array = (3, -15, 0, 1003) 

例 15.3. 要素の取得、設定

SInt32 n = array[1]; // n = -15

array[2] = 6;        // array = (3, -15, 6, 1003)

SInt32 m = array.GetFirst(); // m = 3
SInt32 r = array.GetLast();  // r = 1003

例 15.4. 要素数の取得

SInt32 n = array.GetSize(); // n = 4 

例 15.5. 要素の挿入

// 2 個目の要素の後ろに 99 を挿入する
array.Insert(2, 99);      // array = (3, -15, 99, 6, 1003)

// 先頭に -100 を挿入する
array.InsertFirst(-100); // array = (-100, 3, -15, 99, 6, 1003) 

例 15.6. 部分削除

// array[3] から array[4] までを削除する
array.Remove(3, 5); // array = (-100, 3, -15, 1003) 

例 15.7. 全削除

array.Clear(); // array = () : array は空になる

例 15.8. サイズの伸長

array.SetSize(5); // array = (不定, 不定, 不定, 不定, 不定)

SInt32 i;
for (i = 0; i < array.GetSize(); ++i) {
    array[i] = 10 * (i - 2) * (i - 2);
}

//  array は (40, 10, 0, 10, 40) となる

例 15.9. 検索と存在の判定

SInt32 n1 = array.FirstIndexOf(10);     // n1 = 1
SInt32 n2 = array.FirstIndexOf(5);      // n2 = -1
SInt32 n3 = array.LastIndexOf(10);      // n3 = 3
Bool b = array.Contains(40);            // b = true

例 15.10. 各要素に対する処理 (イテレータ) 1

SFXArray<SInt32>::Iterator iterator = array.GetFirstIterator();
while(iterator.HasNext()) {
    SInt32 n = iterator.GetNext(); // n に要素が入る

    // n に対して処理をする

}

上のコードは次と等価です。

例 15.11. 各要素に対する処理 (イテレータ) 2

SInt32 i;
for (i = 0; i < array.GetSize(); ++i) {
    SInt32 n = array[i]; // n に要素が入る

    //  n に対して処理をする

}

15.1.2. スタック クラス

SFXStack は後から追加した要素を先に取り出すためのデータ構造です。

例 15.12. 定義

// SInt32 を格納するスタック ( SFXStack ) の定義
SFXStack<SInt32> stack;

例 15.13. 要素のプッシュ

stack.Push(3);
stack.Push(-15);
stack.Push(22);
// stack は ( 3 ,  -15 ,  22 ) となる

例 15.14. 末尾の要素の参照

SInt32 r = stack.Peek(); // r = 22
// stack = ( 3 , -15 , 22 )

例 15.15. 要素のポップ

SInt32 n1 = stack.Pop(); // n1 = 22、stack = ( 3 , -15 )
SInt32 n2 = stack.Pop(); // n2 = -15、stack = ( 3 )
SInt32 n3 = stack.Pop(); // n3 = 3、stack = ()

15.1.3. リスト クラス

SFXList は双方向のリストを操作するためのデータ構造です。

例 15.16. 定義

// SInt32 を格納するリスト ( SFXList ) の定義
SFXArray<SInt32> list;

例 15.17. 要素の追加

list.InsertLast(3);
list.InsertLast(-15);
list.InsertLast(0);
list.InsertLast(1003);

// list = ( 3 , -15 , 0 , 1003 )

例 15.18. 要素の取得、設定

// SInt32 n = list[1]; 不可

// list[2] = 6; 不可

SInt32 m = list.GetFirst(); // m = 3
SInt32 r = list.GetLast();  // r = 1003

例 15.19. 要素数の取得

SInt32 n = list.GetSize();  // n = 4

その他の操作は SFXArray と同様です。

15.1.4. ハッシュ マップ クラス

SFXHashmap は、キーと値からなるハッシュ テーブルを操作するデータ構造です。

例 15.20. 定義

// SFXAnsiString と SInt32 の対を格納するハッシュ マップの定義
// ( 例外 ) ハッシュ マップでは SFXAnsiString と SFXWideString をキーとして利用できる
SFXHashmap<SFXAnsiString, SInt32> hashmap;

例 15.21. 要素の追加

hashmap.Set("abc", 7);
hashmap.Set("def", 15);

SFXAnsiString str("ghi");

hashmap.Set(str, 31);

例 15.22. 要素の取得

SInt32 n = hashmap.Get("def"); // n = 15