ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング 逆引きコード集 : コレクション

C++ で作成されたBREW アプリで、可変長配列、ハッシュテーブルなどのコレクションを扱う方法です。
SophiaFramework を用いています。

コレクションの要素をソートする

SophiaFramework にはコレクションの要素をソートする関数は用意されていません。

参考までに、バブルソートを行う関数を示します。

template<typename T>
Void Sort(SFXArray<T>* array)
{
    T i, j, temp;
    for (i = 0; i < array->GetSize() - 1; ++i) {
        for(j = array->GetSize() - 1; j > i; --j) {
            if((*array)[j] < (*array)[j-1]) {
                temp = (*array)[j];
                (*array)[j] = (*array)[j-1];
                (*array)[j-1] = temp;
            }
        }
    }
}

使用例

SFXArray<SInt32> array;
array.Append(5); array.Append(2);
array.Append(70); array.Append(-41);
array.Append(31); array.Append(0);

Sort(&array);  // array の中は -41, 0, 2, 5, 31, 70 となる

参照 SFXArray::Append | SFXArray::GetSize

      

コレクションの全ての要素にアクセスする

コレクションの全ての要素にアクセスするにはイテレータを使用します。

// SInt32 型の Array
SFXArray<SInt32> intArray;

// 要素を追加する
intArray.Append(2);
intArray.Append(4);
intArray.Append(7);
intArray.Append(11);

// イテレータの取得
SFXArray<SInt32>::Iterator itor = intArray.GetFirstIterator();
while(itor.HasNext()) { // 次の要素があるなら
    // 要素の取得
    SInt32 value = itor.GetNext();
}

SFXList, SFXHashmap の場合も同様です。

参照 SFXArray::Append | SFXArray::GetFirstIterator | SFXArray::Iterator::HasNext |
SFXArray::Iterator::GetNext

      

4バイトを超えるデータをコレクションで管理する

SophiaFramework のコレクションクラスには、4バイトを超えるオブジェクトを
直接格納することはできません(SFXHashmap のキーに SFXAnsiString を格納する場合を除く)。
ポインタを介して格納します。

SFXArray<SInt64Ptr> array;
SFXArray<SInt64Ptr>::Iterator itor;
SInt64Ptr ptr;
SFCError err;

// データを追加する

// ヒープを確保する
ptr = ::new SInt64(1234);

// 成功したかチェックする
if (ptr != null) {

    // データを追加し、成功したかチェックする
    err = array.Append(ptr);
}

// 全てのデータを削除する

// コレクションからイテレータを取得し、先頭から巡回する
itor = array.GetFirstIterator();
while (itor.HasNext()) {

    // データを取得する
    ptr = itor.GetNext();
    
    // null でなかったらヒープを開放する
    if (ptr != null) {
        ::delete ptr;
    }
}

// array に登録されている全ての要素を削除する
array.Clear();

参照 SFXArray::Append | SFXArray::GetFirstIterator | SFXArray::Iterator::HasNext
SFXArray::Iterator::GetNext