2008年9月29日月曜日

配列の追加:ArrayList【java】

宣言:コンストラクタ
 ArrayList *name = new ArrayList();

値の代入
 *name.add( "代入" );

参照
 *name.get(i); //i番目の値を参照

****************
多次元的に使うには
宣言
 ArrayList[] *name = new ArrayList[samp]; //sampは行列で言う列の数
 name[0] = new ArrayList();

値の代入
 *name[0].add(i);

(注意)
.get()で返される方はObject型っぽい!
なので、intなどの他の型で返すためにキャストを行っても無理!!
そのための対処方法↓
宣言
 ArrayList<型> *name = new ArrayList<型>();
 多次元の場合
 ArrayList<型>[] *name = new ArrayList[samp];
*name[0] = new ArrayList<型>();

ここで型といってもintと入れても無理。それに対応したクラスを入れる。
(例)intならInteger、doubleならDouble
 

2008年9月25日木曜日

配列とポインタ(配列の受け渡し)

プログラム
*********************
int
main()
{
const int ROW = 4; //行の次元
const int COL = 5; //列の次元

int mat[][COL] = { {11,12,13,14,15},
{21,22,23,24,25},
{31,32,33,34,35},
{41,42,43,44,45} };

    cout << "もとの行列 mat[4][5]:2元配列(配列の配列)\n";
cout << "サイズ: " << sizeof(mat) << endl;
int i,j;
for(i = 0; i < ROW; i++){
for(j = 0; j < COL; j++)
cout << " " << mat[i][j];
cout << endl; //行の終わりに改行
}

// 配列へのポインタ
int (*ptr1)[COL];
ptr1 = &mat[0]; //行列の先頭アドレスで初期化



cout << "\nポインタ (*ptr1)[5]:配列へのポインタ\n";
cout << "ポインタのサイズ: sizeof(ptr1) = "
<< sizeof(ptr1) << endl;
cout << "ポインタが指しているサイズ: sizeof(*ptr1) = "
<< sizeof(*ptr1) << endl;
for(i = 0; i < ROW; i++){
for(j = 0; j < COL; j++)
cout << " " << ptr1[i][j];
cout << endl; //行の終わりに改行
}


実行結果
*********************************
もとの行列 mat[4][5]:2元配列(配列の配列)        
サイズ: 80
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45

ポインタ (*ptr1)[5]:配列へのポインタ
ポインタのサイズ: sizeof(ptr1) = 4
ポインタが指しているサイズ: sizeof(*ptr1) = 20
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45


○もう一つの渡し方
プログラム
*********************
int main()
{
const int ROW = 4; //行の次元
const int COL = 5; //列の次元

int mat[][COL] = { {11,12,13,14,15},
{21,22,23,24,25},
{31,32,33,34,35},
{41,42,43,44,45} };


int *ptr;
ptr = &mat[0][0]; //先頭要素のアドレスで初期化

for(int i = 0; i < ROW; i++){
for(int j = 0; j < COL; j++)
cout << " " << ptr[ i * COL + j];
cout << endl; //行の終わりに改行
}

return 0;
}

実行結果
***********************************
 11 12 13 14 15                  
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45



2008年9月10日水曜日

ファイル書き込み読み込み(atoi,ifstream,ofstream)

#include //ifstream・ofstreamを使うライブラリ?
#include

using namespace std;

int main(void){
int i=0, j;
int lx_num[samp];

//読み込みデータを格納するための配列
char csv_buf[30];
char lx_num_buf[4];

//読み込みファイルを開く
ifstream in_file("in.txt");

//書き込みファイルを開く
ofstream out_file("out.csv");

//書き込みファイルが無ければエラー
if(!in_file)cout<<"error!";
while(1){
//in_fileを1行ずつ読み込み,読み込みデータがなくなったらbreak
if(!in_file.getline(csv_buf,sizeof(csv_buf)))break;

//読み込んだデータの初めの4桁の数字をint型に変換
for(j=0;j<4;j++){
lx_num_buf[j]=csv_buf[j];
}lx_num[i]=atoi(lx_num_buf);

//データの書き込み(1行+int型に変換した数字)
out_file << csv_buf << "," << lx_num[i] << "," <
}
}
return 0;
cout << "finish";
}

**************************************
読み込むファイルはcsvファイルをtxtファイルにしたファイルである.
なので,読み込むデータは全て数字になる.
読み込むデータが英数字でも対応するが,全角だとchar型の為に無理.
atoiがcharからintに変換してくれる.