CAFE

프로그램관련

[MFC/C#/.NET]각종 배열들의 사용 예

작성자gamja|작성시간14.02.04|조회수948 목록 댓글 0
우선, MFC에서 제공하는 배열들은 아래와 같습니다.

Class Name Data Type
CByteArray 8-bit bytes (BYTEs)
CWordArray 16-bit words (WORDs)
CDWordArray 32-bit double words (DWORDs)
CUIntArray Unsigned integers (UINTs)
CStringArray CStrings
CPtrArray void pointers
CObArray CObject pointers





기본적인 데이터 추가 예

Add, SetAt, SetAtGrow로 데이터를 추가할 수 있고,
추가하기 전에 SetSize로 배열의 크기를 지정해 줘야 합니다.
Add는 일반적으로 사용자가 원하는 위치에 들어가지 않을수가 있어서 사용시 주의해야합니다.

아래는 사용 예.
m_aTest.SetSize(3);
m_aTest.Add("가나다");
m_aTest.Add("라마바");
m_aTest.Add("사아자");

for(int i = 0; i < m_aTest.GetSize(); i++)
TRACE("m_aTest[%d] = %s\r\n", i, m_aTest[i]);
m_aTest[0] =
m_aTest[1] =
m_aTest[2] =
m_aTest[3] = 가나다
m_aTest[4] = 라마바
m_aTest[5] = 사아자

m_aTest.Add("가나다");
m_aTest.Add("라마바");
m_aTest.Add("사아자");

for(int i = 0; i < m_aTest.GetSize(); i++)
TRACE("m_aTest[%d] = %s\r\n", i, m_aTest[i]);
m_aTest[0] = 가나다
m_aTest[1] = 라마바
m_aTest[2] = 사아자

m_aTest.SetAtGrow(0, "가나다");
m_aTest.SetAtGrow(1, "라마바");
m_aTest.SetAtGrow(2, "사아자");

for(int i = 0; i < m_aTest.GetSize(); i++)
TRACE("m_aTest[%d] = %s\r\n", i, m_aTest[i]);
m_aTest[0] = 가나다
m_aTest[1] = 라마바
m_aTest[2] = 사아자

m_aTest.SetSize(4);
m_aTest.SetAt(0, "가나다");
m_aTest.SetAt(1, "라마바");
m_aTest.SetAt(3, "사아자");

for(int i = 0; i < m_aTest.GetSize(); i++)
TRACE("m_aTest[%d] = %s\r\n", i, m_aTest[i]);
m_aTest[0] = 가나다
m_aTest[1] = 라마바
m_aTest[2] =
m_aTest[3] = 사아자

m_aTest.SetAt(0, "가나다");
m_aTest.SetAt(1, "라마바");
m_aTest.SetAt(2, "사아자");

for(int i = 0; i < m_aTest.GetSize(); i++)
TRACE("m_aTest[%d] = %s\r\n", i, m_aTest[i]);
!!!Error(크기 미지정)


동적으로 2중 배열 사용

예를들어, 아래처럼 20개의 데이터를 담을 수 있는 배열을 선언해 봅니다.
처음엔 SetSize를 10으로 주었다가 20으로 늘린 이후, 늘어난 배열의 길이만큼 데이터를 또 채워줍니다.
CUIntArray array;
array.SetSize (10);

for (int i=0; i<10; i++)
array[i] = i + 1;
.....
.....
.....
array.SetSize (20);

for (i=10; i<20; i++)
array[i] = i + 1;

그렇지만 이것은 MFC의 이중 배열은 아닙니다.
우리가 원하는 2중 배열의 모습을 아직은 갖추지 못했습니다.
다시, 처음으로 돌아가 다시 살펴보겠습니다.
array.SetSize (10);
for (i=0; i<10; i++)
array[i] = i + 1;

위와 같은 배열을 하나 만든 이후에 아래처럼 값을 추가해주면 2중 배열이 됩니다.
array.SetSize (10);
for (i=0; i<10; i++)
{
for(j=0; j<3; j++)
{
array[i].InsertAt(j, i + j);
}
}

값을 가져올 땐 아래처럼 사용합니다.
for (i=0; i<10; i++)
{
for(j=0; j<3; j++)
{
array[i].GetAt(j);
}
}

항상 2중 배열임을 잊지말고 정확하게 사용해줘야 합니다.
array.GetSize();
= 1

array[0].GetSize();
= 3

==================================================================

아래는 기본적인 배열의 사용 예입니다.


CByteArray - 1
CByteArray* pA = new CByteArray;
pA->SetSize( 2, 5 );

delete( pA );
pA = NULL;

delete(pA);
pA =NULL;


CByteArray AL;
AL.SetSize( 8 );
AL.SetSize( 4, 5 );
AL.SetAt( 0, 100 );
AL.SetAt( 1, 'A' );
AL.SetAt( 1, 'B' );


AL [2] = 102;
AL.ElementAt( 3 ) = 103;
AL.SetAtGrow( 4, 104 );

int N;
N = AL.Add( 106 );
AL.InsertAt( 5, 105, 3 );
AL.InsertAt( 5, ALx );
AL.RemoveAt( 5, 2 );

N = AL.GetUpperBound( );
N = AL.GetSize( );


BYTE D;
D = AL.GetAt( 0 );
D = AL [1];
D = AL [2];
D = AL.ElementAt( 3 );

char SS[20];
for( int i=0; i<N; i++ )
{ pDC->TextOut( 0, 25*i, _itoa(AL[i],SS,10) ); }

AL.FreeExtra( );
AL.RemoveAll( );

CByteArray - 2
CByteArray* pA1 = new CByteArray;
delete( pA1 );

CByteArray AL1;
AL1.SetSize( 2 );
AL1.SetAt( 0, 100 );
AL1 [1] = 200;

int N1 = AL1.GetUpperBound( );
BYTE D1;
D1 = AL1.GetAt( 0 );
D1 = AL1 [1];

CWordArray
WORD: unsigned short int

CWordArray* pA2 = new CWordArray;
delete( pA2 );

CWordArray AL2;
AL2.SetSize( 2 );
AL2.SetAt( 0, 100 );
AL2 [1] = 200;

int N2 = AL2.GetUpperBound( );
WORD D2;
D2 = AL2.GetAt( 0 );
D2 = AL2 [1];

CUintArray
CUIntArray* pA3 = new CUIntArray;
delete( pA3 );

CUIntArray AL3;
AL3.SetSize( 2 );
AL3.SetAt( 0, 100 );
AL3 [1] = 200;

int N3 = AL3.GetUpperBound( );
UINT D3;
D3 = AL3.GetAt( 0 );
D3 = AL3 [1];

CDWordArray
CDWordArray* pA4 = new CDWordArray;
delete( pA4 );

CDWordArray AL4;
AL4.SetSize( 2 );
AL4.SetAt( 0, 100 );
AL4 [1] = 200;

int N4 = AL4.GetUpperBound( );
DWORD D4;
D4 = AL4.GetAt( 0 );
D4 = AL4 [1];

CStringArray
CStringArray* pA5 = new CStringArray;
delete( pA5 );

CStringArray AL5;
AL5.SetSize( 2 );
CString S5("AAA");
AL5.SetAt( 0, (LPCTSTR)S5 );
AL5 [1] = "BBB";

int N5 = AL5.GetUpperBound( );
CString D5;
D5 = AL5.GetAt( 0 );
D5 = AL5 [1];

CStringList
CStringList* pA1 = new CStringList;
delete( pA1 );
CStringList CR1( 5 );

POSITION PS1;
PS1 = CR1.GetHeadPosition( );

CString S10("AAA");
PS1 = CR1.AddHead( (LPCTSTR)S10 );

S10="abc";
CR1.SetAt( PS1, "aaa" );
PS1 = CR1.InsertAfter( PS1, "BBB" );

PS1 = CR1.InsertAfter( PS1, "CCC" );
PS1 = CR1.InsertAfter( PS1, "EEE" );
PS1 = CR1.InsertBefore( PS1, "DDD" );
PS1 = CR1.AddTail( "FFF" );

BOOL B1 = CR1.IsEmpty( );
B=TRUE(1)

int N1;
N1 = CR1.GetCount( );
CString D1;
D1 = CR1.GetHead( );
D1 = CR1.GetTail( );
PS1 = CR1.GetHeadPosition( );
D1 = CR1.GetAt( PS1 );PS1

D1 = CR1.GetNext( PS1 );
D1 = CR1.GetNext( PS1 );
D1 = CR1.GetNext( PS1 );
D1 = CR1.GetNext( PS1 );
D1 = CR1.GetNext( PS1 );
D1 = CR1.GetNext( PS1 );

PS1 = CR1.GetTailPosition( );
D1 = CR1.GetPrev( PS1 );
D1 = CR1.GetPrev( PS1 );

N1 = CR1.GetCount( );
PS1 = CR1.GetHeadPosition( );

for( int i=0; i<N1; i++ )
{ pDC->TextOut( 0, i*25, CR1.GetNext( PS1 ) ); }

PS1 = CR1.FindIndex( 3 );
PS1 = CR1.Find( "CCC" );

D1 = CR1.GetAt( PS1 );
PS1 = CR1.Find( "CCC", PS1 );

if ( PS1 != NULL )D1 = CR1.GetAt( PS1 );

PS1 = CR1.GetHeadPosition( );
CR1.RemoveAt( PS1 );

D1 = CR1.RemoveHead( );
D1 = CR1.RemoveTail( );

CR1.RemoveAll( );
PS1 = CR1.AddHead( "AAA" );

CPtrList
CPtrList* pA3 = new CPtrList;
CCR* pLa = new CCR("AAA", 100);
PS1 = pA3->AddHead( (CObject *)pLa );
delete( pLa );
delete( pA3 );

CPtrList CR3;
CCR La("AaA", 300);
CCR Lb("BbB", 301);
CCR Lc("CcC", 302);
POSITION PS3;
PS3 = CR3.AddHead( &La );
PS3 = CR3.InsertAfter( PS3, &Lb );
PS3 = CR3.InsertAfter( PS3, &Lc );
PS3 = CR3.GetHeadPosition( );

CPtrList *pD3;
CString D3_S;

int D3_N;
pD3 = (CPtrList *)CR3.GetNext( PS3 );
D3_S = (*(CCR *)pD3).Get_S( );
D3_N = ((CCR *)pD3)->Get_N( );

pD3 = (CPtrList *)CR3.GetNext( PS3 );
D3_S = (*(CCR *)pD3).Get_S( );
D3_N = ((CCR *)pD3)->Get_N( );

CList
#include <afxtempl.h>
#include "CR.h"CCR
CList< CCR, CCR& >* pC4 = new CList< CCR, CCR& >(10);
delete( pC4 );

CList < CCR, CCR& >CR4;
CCR Li("Aaa", 400);
CCR Lj("Bbb", 401);
CCR Lk("Ccc", 402);

POSITION PS4;
PS4 = CR4.AddHead( Li );
PS4 = CR4.InsertAfter( PS4, Lj );
PS4 = CR4.InsertAfter( PS4, Lk );

PS4 = CR4.GetHeadPosition( );

CCR D4;
CString D4_S;
int D4_N;

D4 = CR4.GetNext( PS4 );
D4_S = D4.Get_S( );
D4_N = D4.Get_N( );

D4 = CR4.GetNext( PS4 );
D4_S = D4.Get_S( );
D4_N = D4.Get_N( );

D4 = CR4.GetNext( PS4 );
D4_S = D4.Get_S( );
D4_N = D4.Get_N( );

CPtrList
#include <afxtempl.h>

CTypedPtrList< CPtrList, CCR* > *pA5 = new CTypedPtrList< CPtrList, CCR* >;
delete( pA5 );

CTypedPtrList< CPtrList, CCR* > CR5;
CCR L50("AAA", 500);
CCR L51("BBB", 501);
CCR L52("CCC", 505);

POSITION PS5;
PS5 = CR5.AddHead( &L50 );
PS5 = CR5.InsertAfter( PS5, &L51 );
PS5 = CR5.InsertAfter( PS5, &L52 );

PS5 = CR5.GetHeadPosition( );
CCR *pD5;
CString D5_S;
int D5_N;

pD5 = CR5.GetNext( PS5 );
D5_S = (*pD5).Get_S( );
D5_N = pD5->Get_N( );

pD5 = CR5.GetNext( PS5 );
D5_S = pD5->Get_S( );
D5_N = pD5->Get_N( );

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼