본문으로 바로가기

동적배열 사용하기 (CArray)

category 개발언어/c++ 2016. 6. 13. 15:15

동적배열 사용하기

C++에서 배열을 정의 할때 정적으로  

int mar[4]; 와 같이 사용하는 경우가 많다,

이렇게 사용하게 되면  많은 불편함이 따른다 Buff의 크기를 미리 정해 두고 버프의 크기 만큼

연산을 반복 수행하거가,실제 유효한 Data가 탑재된 메모리의 내용을 파악하는 플래그를 두는 등 번거로운 작업 따른다.

이럴때 CArray를 사용하면 많은 편리함을 얻을 수 있다.

기본적으로 MFC에서 제공하는  Array 클래스는

  • CObArray : CObject 객체 포인터 배열
  • CByteArray : 8비트 데이터(== unsigned char) 배열
  • CDWordArray : 32비트(== unsigned int) 배열
  • CPtrArray : void 포인터 배열
  • CStringArray : CString 클래스 객체 배열
  • CWordArray : 16비트 데이터 배열
  • CUIntArray : (==unsigne int) 데이터 배열

등이 있다

사용할 수 있는 함수도 준비 되어 있다.

GetSize() : 배열의 전체 크기 리턴

SetSize() : 배열의 크기를 강제로 설정

RemoveAll() : 배열의 전체 데이터 제거

GetAt() : 주어진 인덱스의 배열값 얻기

SetAt() : 주어진 인덱스의 배열값 설정

Add() : 배열의 크기를 늘린 뒤, 새로운 데이터를 배열의 끝에 추가

InsertAt() : 주어진 인덱스에 새로운 데이터 추가 후, 배열의 크기 늘림

RemoveAt() : 주어진 인덱스의 데이터를 삭제하고, 배열의 크기를 줄임

GetData(); Data를 통째로 Pint로 가져온다,쉽게 말하면 CByteArrayGetData() =>Byte []  형과 같이 바꾸어 준다는 의미이다.

FreeExtra() : SetSize() 후 배열의 크기가 줄어들었을 경우 버퍼 메모리 해제

내가 만든 구조체 혹은 클래스를 Carry로 관리 할 때는 어떻게 할까

CArray

The CArray class supports arrays that are similar to C arrays, but can dynamically shrink and grow as necessary.

template< class TYPE, class ARG_TYPE > class CArray : public CObject

에 설명 되어 있는 것 처럼

CArray<Mycalss,Myclass*> m_arcls;

처림  CArray를 선언하면  

m_arcls.SetAt(new Myclass);

Myclass* p_mycla=m_arcls[0];

p_mycla->Myfunction();

과 같이 사용 할  수 있다.