필요성 :
지금까지와는 다르게 배열의 크기를 지정하지 않아도 되는 배열을 만들고싶다.
준비물 :
{
데이터가 담길 공간(배열 혹은 주소값)
현재 공간의 인덱스 혹은 카운팅
공간의 최대 크기(최대크기를 넘어서면 공간을 더 늘리기 위함, 인덱스or카운팅과 비교용)
}
위 요소들을 포함하는 객체
구현과정 :
1. 준비물들을 포함하는 구조체 혹은 클래스를 헤더 파일에 만든다.
2. 객체 활용에 필요한 함수들을 헤더 파일에 만든다.
ㄱ. 초기화 함수
ㄴ. 데이터 입력 함수
ㄷ. 메모리 해제 함수
3. cpp파일에 함수들을 구현한다.
초기화함수 : 데이터가 저장될 공간을 malloc 함수나 new 함수를 이용하여
공간의 최대크기만큼 확보해놓는다. 인덱스 값은 0에서 시작.
데이터 입력함수 : 함수로 입력받은 데이터값을 카운팅된 인덱스 자리에 넣는다.
그 후에 카운팅 값을 올린다.
혹시 카운팅 인덱스값과 공간최대값이 같다면 공간을 재할당한다.
-> 여기서 재할당 함수를 새로 만듦. 처음 설계땐 생각하지 못함.
재할당 함수 : 임시로 공간을 만드는데 그 크기는 기존의 것에 두배 등을 하여 크게 할당받는다.
할당받은 공간에 기존의 공간에 있던 데이터들을 복사한다. (for 혹은 while)
기존의 할당받은 공간을 해제한다.
객체의 데이터가 담긴 공간의 주소를 임시로 만들었던 공간의 주소로 바꿔치기한다.
공간의 최대크기 값 역시 늘려준다. (인덱스와 비교용)
메모리 해제 함수 : 객체의 데이터가 저장된 공간의 주소의 메모리를 해제한다.
객체의 나머지 값들 역시 초기화 시킨다.
main.cpp 파일에서 작성한 함수들을 테스트해본다.
--------------------------------------------------------------------
의식의 흐름을 정리해봤는데 내가 봐도 넘 어지럽다.
용어의 정리가 필요해보인다.
배열과 포인터 사이의 유연성에 대해 조금 더 친근해 질 필요가 있어보인다.
'💯Study > 👨💻C Language' 카테고리의 다른 글
가변배열(Variable-length array)이란?(가변배열 1) (0) | 2022.05.05 |
---|---|
포인터에 대한 고찰...(1) (0) | 2022.05.04 |
댓글