C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1110] 배열 래퍼 템플릿 클래스. (Array wrapper template class) : 업2
김태선 [cppbuilder] 10149 읽음    2012-11-21 11:23
배열 다룰때 C++고유의 원시적인 형태가 아닌
C#이나 java처럼 크기를 바로 참조하여 편리하게 배열을 다루기 위한 배열 래퍼 템플릿 클래스 입니다.
프로그램의 편의성을 증대시킵니다.
상당히 간결한 형태이지만 실전에 사용해보니  은근히 편리해서 올립니다.

값을 지정할때는 원시 배열에 직접 지정하는 것과 같다는 사실만 주의하면 됩니다.
이 클래스가 별도의 배열값의 사본을 가지는게 아니고 원시 배열을 그대로 엑세스하기 때문입니다.

#ifndef __CArray_H
#define __CArray_H


//---------------------------------------------------------------------------
/*
	배열 래퍼 클래스.
	java, C# 처럼 배열과 그 배열의 크기를 지정한 클래스.

	주의할 것은 배열크기는 처음에 지정하면 변화시키지 못한다.
	변화 시키려면 인자로 썼던 모배열의 크기를 변화 시키고
	다시 이 클래스에 대입하면 된다.

	이 클래스는 배열에 대한 서비스형 래퍼클래스이기 때문이다.
	하지만 CArray[n] = 데이타; 식으로 값일 직접 변경하는 것은 무방하다. 

	Written by KTS.
*/

template
class CArray
{
	T *Array;
	
public:
	int Length;

public:
	CArray()
	{
		Array = NULL;
		Length = 0;
	}
	CArray(T *array, int length)
	{
		SetArray(array, length);
	}

	void	SetArray(T *array, int length)
	{
		Array = array;
		Length = length;
	}

	T& operator [] (int idx)
	{
		if (idx < 0 || idx >= Length)
			throw new Exception("CArray[] : index is out of length");
		return Array[idx];
	}

	bool	IsExists(T item)
	{
		return GetIndex(item) >= 0;
	}

	int		GetIndex(T item)
	{
		for(int c = 0; c < Length; c++)
		{
			if (item == Array[c])
				return c;
		}
		return -1;
	}
};



typedef CArray 			CArrayInt;
typedef CArray 			CArrayPChar;
typedef CArray 			CArrayString;
typedef CArray 		CArrayAnsiString;
typedef CArray 		CArrayWideString;
//typedef CArray 	CArrayUnicodeString;
//---------------------------------------------------------------------------

#endif


사용은 이런 식으로 하시면 됩니다.
예제.


void __fastcall TFormDataBrow::FormCreate(TObject *Sender)
{
	String s;

	// 정수배열

	int list1[] = { 1, 2, 3, 99 };
	CArray array1(list1, sizeof(list1) / sizeof(int));

	array1[3] = 4;
	for(int c = 0; c < array1.Length; c++)
	{
		s += array1[c];
		s += " ";
	}

	// 문자열 배열

	char *list[] = { "한글", "두글", "세글", "글글" };
	CArray array(list, sizeof(list) / sizeof(char *));

	array[3] = "네글";
	for(int c = 0; c < array.Length; c++)
	{
		s += array[c];
		s += " ";
	}

	// 스트링 클래스 배열

	String list2[] = { "한글2", "두글2", "세글2", "글글2" };
	CArray array2(list2, sizeof(list2) / sizeof(String));

	array2[3] = "네글2";
	for(int c = 0; c < array2.Length; c++)
	{
		s += array2[c];
		s += " ";
	}

	Caption = s;
}



특히 다른 함수를 호출할때 함수 인자로 쓰면 매우 편리합니다.
이 클래스의 진정한 가치틑 바로 이런 활용에 있습니다.

//---------------------------------------------------------------------------


void __fastcall TForm1::FormCreate(TObject *Sender)
{
	String	list[] = { "한글", "두글", "세글" };
	CArrayString alist(list, sizeof(list) / sizeof(String));
	String s = Disp(alist);
	for(int c = 0; c < alist.Length; c++)
	{
		s += alist[c] + " ";
	}
	Caption = s;
}
//---------------------------------------------------------------------------

String	TForm1::Disp(CArrayString list)
{
	String s;
	for(int c = 0; c < list.Length; c++)
	{
		s += list[c] + " ";
	}
	return s;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
1110 배열 래퍼 템플릿 클래스. (Array wrapper template class) : 업2 김태선 10149 2012/11/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.