配列

最終更新日03 Feb 2018 01:51

変数がコーヒーカップならば配列はcarry trayのようなもの、といいますが[2]

配列操作のお便利クラス

配列の長さを調べるには?

ポインタテクニックを使って求めることができる。

string names[]={"ModelView","Proj","map","slice","clip_eqn"};
    int size = sizeof(names) / sizeof(names[0]);

なぜそうなるのか?
分子のnames[0]はnames[1]でもなんでもいい。配列の要素のどれかならば。

sizeof(names[0]);

は、配列の要素一個あたりのサイズになる。
だから、型がわかってれば

sizeof(string);

と書いてもいい。

sizeof(配列名)

は何を意味しているか?
メモリの中で配列はここからここまで、と区切ってある区間のサイズをバイト数で示しているのだ。

配列の初期化

まだサイズが未定の場合

arr=[]
arr.append(1);//要素の追加

n個の要素を0で埋めて初期化したい場合
arr = [0 for i in range(n)]

配列の宣言に使える数値

  • const int NUM=10;
  • #define NUM 10
  • enum{NUM=10};enumハックと呼ばれているらしい。
double miffyarray[NUM];

For Eachでらくらくループ

foreach

配列の中身をプリントする

 vector<string> a{"ab","aba","A"};
 for_each(a.begin(),a.end(), [](auto p){cout << p << ","; });

組み込み配列の場合
#include <iterator>
int arr[3];
    arr[0] = 2;
    arr[1] = 4;
    arr[2] = 6;
    for_each(begin(arr), end(arr), [](auto p) {cout << p << ","; });

Visual Studioのデバッグ時に配列の中身をみる

ウォッチの名前の部分に、ポインタ変数名に ,(カンマ)と表示する個数を追加します。
【VisualStudio】ウォッチでポインタの中身を参照する

各言語の配列操作比較表

ネイティブ言語編

項目 C C++(std::vector) java Java(ArrayList)
配列の初期化 int a[16]={1,2,…}; vector<int> a(t, t+sizeof(t)/sizeof(t[0])); int[] a={1,2,..};([]の中に数字を入れてはいけないint a[]でもok) ArrayList<int> a=new ArrayList<int>();
配列の初期化 int a[16]; int[] a = a(16);
配列の初期化 int *a=new int[16]; int[] a=new int[16];
配列の0クリア int a[16]={0};
配列を同じ値で埋める fill(begin,end,val)
配列の長さ for eachかsizeof vector<T>.size() array.length
関数の引数が配列の時 void method(int *_a); void method(int[] _a);
配列を回すとき for (int i = 0;i < num ;i++) for (int i = 0;i < array.length;i++)
配列のコピー memcpy() copy()
a=配列オブジェクトを示します
x=要素
i=インデックス
Python(list) JavaScript(Array) Perl(@) C++(std::vector)
初期化 a = [1, 2, 3] a = [1, 2, 3]
配列の長さ len(a) a.length scalar(@a)*1$#a + 1 a.size()
配列のコピー b=a.copy() copy
配列が空かどうか not a a.length == 0 !scalar(@a)*1$#a == -1 a.empty()
要素を後ろに足す a.append(要素) a.push(x) push(@a, $x) a.push_back(x)
要素の挿入 a.insert(i, 要素) a.unshift(x) unshift(@a, $x) a.insert(a.begin(), x) *2
末尾要素の取り出し a.pop() a.pop() pop(@a) a.pop_back()*3*4
要素をインデックスで削除 a.pop(i) a.shift() shift(@a) a.erase(a.begin())*5*4
要素の結合 a.extend(b) a = a.concat(b) push(@a, @b) a.insert(a.end(), b.begin(), b.end())
配列のクリア a[:] = [] かa.clear()だとaはNoneになる a.length = 0 @a = ()undef @a$#a = -1 a.clear()
要素の全部削除 @a = grep {$_ != $x} @a a.erase(remove(a.begin(), a.end(), x), a.end())
指定要素を削除 a.remove(要素) a.splice(i, 1) splice(@a, $i, 1) a.erase(a.begin() + i)
要素の数 a.count(x) grep {$_ == $x} @a*8 count(a.begin(), a.end(), x)
要素の検索 x in a (grep {$_ == $x} @a) != 0 find(a.begin(), a.end(), x) != a.end()
要素のインデックス検索 a.index(x) find(a.begin(), a.end(), x) - a.begin()
先頭の要素 a[0] a[0] $a[0] a.front()*4
最後尾の要素 a[-1] a[a.length-1] $a[-1] a.back()
スライス a[i:i+l] a.slice(i,i+l) @a[$i..$i+$l-1]
配列の確保 list1 = [],list2 = list() var array=new Array() int arr=new int[100]
n個要素の配列確保 a= [0 for i in range(n)]
Python(list) JavaScript(Array) Perl(@) C++(std::vector)

配列のインデックス超えたエラーのキャッチ

 catch( ArrayIndexOutOfBoundsException e ) 
 
  { 
   System.out.println( "Valid indexes are 0, 1,2,3, 4,5,6 or 7" );
  }

可変長配列をただの配列に変換する

C#の場合

using System.Collections;
 ArrayList ans = new ArrayList();
 (int[])arraylist.ToArray(typeof(int));


c java pert python python-basic ruby


ファイル

サポートサイト Wikidot.com cjavapertpythonpython-basicruby