본문 바로가기
C++/기초

C++ 기초 : 가변 배열 (2)

글: 시플마 2024. 4. 6.

Arr.h 파일에서 가변 배열(int형)을 위한 구조체

 

tArr을 선언하였습니다.

 

멤버는

힙 영역 공간의 주솟값을 받을 수 있도록 int형 포인터 변수 pInt와

현재 값이 들어가 있는 배열의 개수를 나타내는 변수 iCount,

현재 할당된 배열의 최대 개수를 나타내는 변수 iMaxCount입니다.

 

 

이후 main.cpp에서

 

tArr 자료형을 가진 객체를 초기화하려고 하였는데

초기화할 때마다 멤버 하나씩 값을 지정해주어야 하네요.

 

차라리 초기화를 해 주는 함수를 따로 구현하는 게 나아 보입니다.

 

객체를 초기화하기 위한 

함수의 선언을 Arr.h 파일에 해주고

 

 

정의는 

 

Arr.cpp 파일에 했습니다.

 

객체의 주솟값을 받아 멤버에 직접 접근할 수 있게 합니다.

 

그리고 동적 할당을 위한 int형 포인터 변수 pInt에 힙 영역의 주솟값을 저장합니다.

int의 크기는 4이므로 4 * 2 = 8 Byte 만큼 힙 영역 공간을 할당하였네요.

괄호 안에 바로 8을 대입하여 할당하여도 되지만 자료형이 int인 두 개의 공간을 

할당한다는 의도를 직관적으로 보여주기 위해 위처럼 작성하였습니다.

 

처음엔 아무런 값도 없을테니 iCount의 값은 0,

두 개의 공간을 할당하였으니 iMaxCount의 값은 2로 초기화합니다.

 

 


 

 

 

tArr형 객체 s를 초기화하였으니 힙 영역을 할당(동적 할당)한 상태입니다.

그래서 동적 할당한 메모리를 해제하는 함수도 미리 작성해 봅시다.

 

Arr.h 파일에

 

메모리 해제를 위한 함수를 선언하였습니다. 

 

 

Arr.cpp 파일에는

메모리 해제를 위한 함수를 정의하였습니다.

 

메모리를 해제하고자 하는 객체의 주솟값을 받습니다.

 

이후 해당 객체의 멤버 pInt로 접근하여

동적 할당 중인 공간을 free 함수를 통해 해제합니다.

 

이후 힙 영역에 남은 iCount와 iMaxCount의 값을

0으로 하여 깔끔하게 제거해 줍니다.

 

 

해당 함수는 main 함수가 끝나기 직전,

즉 모든 과정이 마무리되고 마지막에 넣어주면 되겠죠.

 

 

 


 

 

 

다음은 동적 할당된 공간에 값을 넣기 위한 함수를 구현합니다.

 

Arr.h 파일에 

 

데이터를 넣는 함수를 선언하고

 

 

Arr.cpp 파일에 

 

데이터를 넣는 함수를 정의합니다.

 

객체 멤버에 접근할 수 있도록 객체의 주솟값과

대입할 값을 인자로 받으면 되겠죠?

 

 

현재 tArr형 객체(변수) s의 상태를 

 

그림으로 나타낸 것입니다.

 

이 상태에서 데이터를 넣으려고 하면, 우선

pInt가 가리키고 있는 공간으로 가야 합니다.

 

그리고 배열의 몇 번 인덱스에 넣을지 선택해야 하죠.

 

이때 iCount를 이용하면 됩니다.

 

현재 iCount의 값은 0입니다. 즉 아무런 데이터도 삽입되어 있지

않은 상태이죠. 그럼 0번 인덱스에 값을 넣으면 됩니다.

이후 후위 증감 연산자를 통해 iCount의 값을 1 올립니다.

 

또 데이터를 넣고자 한다면 0번 인덱스에는 값이 있으므로

이번에는 1번 인덱스에 값을 넣어야겠죠. iCount의 값이 1이므로

iCount 값을 인덱스 번호로 사용하면 됩니다.

 

 

그런데 만약 1번 인덱스까지 다 찬 상태에서 값을 넣으려고 하면

들어갈 공간이 없으므로 자동으로 배열 공간을 늘려줘야 할 것입니다.

 

즉 데이터 삽입 함수인 PushBack 함수가 호출되었는데

배열의 최대 개수를 나타내는 iMaxCount의 값이, 다음 값이 들어갈 인덱스 번호를

나타낼 때 사용하는 iCount의 값보다 작거나 같으면 배열의 공간을

늘리는 함수인 Reallocate 함수를 호출해야 합니다.

 

 

 

 

강의 출처 : https://www.youtube.com/watch?v=PFc4g8mxOiI&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&pp=iAQB


 

'C++ > 기초' 카테고리의 다른 글

C++ 기초 : 리스트 (1)  (0) 2024.04.07
C++ 기초 : 가변 배열 (3)  (0) 2024.04.07
C++ 기초 : 가변 배열 (1)  (0) 2024.04.06
C++ 기초 : 동적 할당 (2)  (2) 2024.04.06
C++ 기초 : 동적 할당 (1)  (0) 2024.04.04