配列

はじめに


配列。データ処理を行うアプリケーションに必ずついてくるものかと思います。MFCを使っているとCArrayという配列関数があるのでお世話になっています。

ということで、MFCを使わないアプリケーションでも同じように使えるクラスを書いてみました。
可変的な定義「テンプレート」を始めて使ってみました。マクロによる置き換えのような感じだそうで、これは便利だなぁと思いました。このような処理にはうってつけですね。

ダウンロード:
myArrayImpl.zip

準備 


使いたいファイルで"myArray.h"をインクルードしてください。
それで準備完了です。

使い方 


まず定義です。ここではBYTE型の配列を定義することにします。

/* 配列の定義 */
CmyArray<BYTE, BYTE> abyArray;

まんなかの"BYTE"のところに使いたい型を記述します。2つありますが同じのを入れとけばOKです。
続いて、使い方のサンプルを書いていきます。

要素を追加:

/* 配列に3を追加する */
abyArray.Add (3);

要素を削除:

/* 2番目の要素を削除 */
abyArray.RemoveAt (1);

要素を全て削除:

/* 要素を全て削除 */
abyArray.RemoveAll ();

要素数を取得:

int nCount;

/* 要素数を取得 */
nCount = abyArray.GetSize ();

要素を変更:

/* 3番目の要素を変更 */
abyArray.SetAt (2, 5);

/* 2番目の要素を変更 */
abyArray[1] = 10;

要素を取得:

BYTE byTmp;

/* 1番目の要素を取得 */
byTmp = abyArray.GetAt (0);

/* 5番目の要素を取得 */
byTmp = abyArray[4];

というように使います。構造体やポインタも同じように配列として扱うことができます。ポインタに関しては、開放はユーザーで行う必要があります。あくまでポインタを配列に入れるだけですので。

詳しくは"myArray.h"と"myArrayImpl.h"を見てください。それぞれ、定義と実装のファイルです。このクラスで使用しているテンプレートの都合上、実装ファイルもヘッダになっています。なぜヘッダじゃないといけないのかよくわかっていないのですが、そういうものなんだと割り切っています。ちなみに、関数名はMFCのCArrayと同じですね。MFCのソースを見ると中身も似ている気がしますが、それは置いときましょう。

このクラスを使うことで、最大いくつになるかわからない配列を自由に使うことができます。必要になったときにぽんぽん追加していけるわけです。「間の要素を1つだけ消す」関数が無いですが、必要に応じて追加してみてくださいませ。今のところ最低限のものしか書いていません。