« GIF画像の縦横サイズだけを取得する(C++/C#/JAVA) | トップページ | C++/C#/JAVA コレクション比較 【インデックスによる要素アクセス】 »

2008年12月10日 (水)

C++/C#/JAVA コレクション比較 【列挙しながら要素削除】

std::vector [VC++2003]
System.Collections.Generic.List(T) [C#2008 Express Edition]
java.util.ArrayList [J2SE 1.6.0_03]

以上のコレクション(コンテナ)の使い方比較

テーマ【列挙子(イテレータ)で全要素を列挙しながら条件に該当する要素をすべてコレクションから削除する


C++の場合

std::vector<A> al;
std::vector<A>::iterator it;

// 要素を列挙しながら削除
it = al.begin();
while (it != al.end()){
    A& a = *it;
    if (aが削除条件を満たしているとき){
        it = al.erase(it);
    } else {
        it++;
    }
}


C#の場合

List(T).Enumerator構造体には削除のためのメソッドは無いし、List(T)にもList(T).Enumeratorと関連した削除メソッドは無い。
したがって削除しない要素を別のListに拾い出していくような方法しかない?。

List<A> al = new List<A>();
List<A>.Enumerator it;

List<A> al2 = new List<A>();
it = al.GetEnumerator();
while (it.MoveNext()) {
   A a = it.Current;
   if (aが削除条件を満たしているとき) {
   } else {
       al2.Add(it.Current);
   }
}
al = al2;


JAVAの場合

ArrayList<A> al = new ArrayList<A>();
ListIterator<A> it;

it = al.listIterator();
while (it.hasNext()){
    A a = it.next();
    if (aが削除条件を満たしているとき){
        it.remove(); // 最後のnext()で返された要素を削除する
    }
}

« GIF画像の縦横サイズだけを取得する(C++/C#/JAVA) | トップページ | C++/C#/JAVA コレクション比較 【インデックスによる要素アクセス】 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: C++/C#/JAVA コレクション比較 【列挙しながら要素削除】:

« GIF画像の縦横サイズだけを取得する(C++/C#/JAVA) | トップページ | C++/C#/JAVA コレクション比較 【インデックスによる要素アクセス】 »