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

15.2. クラス インスタンスのコレクションを作成する方法

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

[Note] 例外

SFXHashmap クラスは SFXAnsiStringSFXWideString のインスタンスを格納できます。

例 15.23. 定義

// 文字列 ( SFXAnsiString ) を格納する可変長配列 ( SFXArray ) の定義
// 文字列を指すポインターを格納する
SFXArray<SFXAnsiStringPtr> array;

例 15.24. 要素の追加

// 文字列を動的に生成する
SFXAnsiStringPtr str = new SFXAnsiString("abc");

// ポインターを格納する
array.InsertLast(str);

// 直接記述できる
array.InsertLast(new SFXAnsiString("def"));

例 15.25. 要素の取得、設定

// 前から 2 番目の要素を取得する
SFXAnsiStringPtr str = array[1];

// 表示
TRACE("%s", str->GetCString());

// 直接表示
TRACE("%s", array[1]->GetCString());

// 要素の設定

// 直接 array[0] = new SFXAnsiString("ghi"); とするとメモリリークが発生する
delete array[0]; // 動的に生成した文字列を削除する

array[0] = new SFXAnsiString("ghi");

例 15.26. 要素数の取得

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

例 15.27. 部分削除

// array[3] から array[4] までを削除 する
SInt32 i;

for (i = 3; i < 5; ++i) {
    delete array[i];
}

array.Remove(3, 5);

例 15.28. 全削除

SFXArray<SFXAnsiStringPtr>::Iterator iterator = array.GetFirstIterator();

while (iterator.HasNext()) {
    SFXAnsiStringPtr str = iterator.GetNext();
    delete str;
}

array.Clear(); // array = ()

例 15.29. 検索と存在の判定

// SInt32 n1 = array.FirstIndexOf("abc"); 不可
// SInt32 n2 = array.FirstIndexOf(new SFXAnsiString("abc")); 不可

// 以下のように記述する必要がある

SFXArray<SFXAnsiStringPtr>::Iterator iterator = array.GetFirstIterator();

while (iterator.HasNext()) {
    SFXAnsiStringPtr str = iterator.GetNext();
    if (str->Equals("abc")) {
        return true;
    }
}
return false;

サンプルコード:SFXList インスタンス要素の格納