우선, 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();= 1array[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 intCWordArray* 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 );PS1D1 = 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"CCRCList< 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( );
다음검색