« 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;

C#の場合
        List<A> al = new List<A>();

JAVAの場合
  ArrayList<A> al = new ArrayList<A>();

以下の例でコレクション(コンテナ)は上記の様に宣言されているとする。
また、C++/C#/JAVAどの言語においてもインデックスの範囲は 0 ~ (要素数-1) である。


インデックスによる要素アクセス法
C++の場合
  al[インデックス].Aのメンバー
 
C#の場合
  al[インデックス].Aのメンバー
 
JAVAの場合
  al.get(インデックス).Aのメンバー


範囲外アクセス
C++の場合
  未定義(「例外」ではない。異常値を返したりプログラムが異常停止)

C#の場合
  System.ArgumentOutOfRangeException例外

JAVAの場合
  java.lang.IndexOutOfBoundsException例外


インデックスで指し示した要素の置き換え
C++の場合
  al[インデックス] = A(....);

C#の場合
  al[インデックス] = new A(....);

JAVAの場合
  al.set(インデックス, new A(....));
  (注:戻り値は指定された位置に以前あった要素)


インデックスの位置に要素をコレクション追加
元々インデックスの位置にあった要素とそれ以降の要素を後ろにずらす。

C++の場合
  for (it=al.begin(), i=0; it != al.end(); it++, i++){
     if (i == インデックス){
        al.insert(it, A(....));
        break;
     }
  }

C#の場合
  al.Insert(インデックス, new A(....));
  (注:O(n)操作, n=Count)

JAVAの場合
  al.add(インデックス, new A(....));


インデックスで指し示した要素をコレクションから削除
C++の場合
  for (it=al.begin(), i=0; it != al.end(); it++, i++){
     if (i == インデックス){
       al.erase(it);
       break;
     }
  }

C#の場合
  al.RemoveAt(インデックス);
  (注:O(n)操作, n=Count-インデックス)

JAVAの場合
  al.remove(インデックス);

« C++/C#/JAVA コレクション比較 【列挙しながら要素削除】 | トップページ | C++/C#/JAVA コレクション比較 【ハッシュテーブルの比較概要】 »

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

コメント

コメントを書く

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

トラックバック

« C++/C#/JAVA コレクション比較 【列挙しながら要素削除】 | トップページ | C++/C#/JAVA コレクション比較 【ハッシュテーブルの比較概要】 »