대충 구현된 레파지토리

vector 작업 1일차

c언어와 친해지기

당장 다음주부터 c로 무언가 코드를 짜야한다는 소리를 듣고 c언어의 모듈화에 대해 알아보았다.
클래스가 없는 c언어의 특성상 제대로된 작업을 진행하기 위해서는 헤더파일을 만들고, 이후 그 헤더파일에 대한 구현을 담으면 좀 더 정리가 된다.

헤더 만들시 유의사항

우선 .h에는 함수를 정의하는 용도로 사용하고, 이에 대한 구현부는 소스파일인 .c에 구현하도록 한다.
또한 소스파일과 헤더파일명은 일치해야지 이후 링커가 제대로 이 둘을 연결시켜줄 수 있다.

까다로웠던 함수

erase함수

void erase(int* itr,vector* v) {
	if (v->size == 0)return NULL;
	else {
		int* target = itr; 
		int* end = &(v->data[v->size - 1]); 

		// 삭제할 요소 다음 요소들을 한 칸씩 앞으로 이동
		while (target < end) {
			*target = *(target + 1);
			target++;
		}

		v->size--; // 벡터의 크기를 하나 줄임
	}
}

이 함수는 gpt의 도움을 조금 받았는데, 처음에는 size–만 생각했다가 그러면 이터레이터를 통해서 어떻게 삭제할 인덱스에 접근할 것인지 고민에 빠졌다.
굉장히 간단한 아이디어였는데, 삭제할 요소의 인덱스 값을 우리가 가지고 있으니 이 요소의 앞은 그대로 두고 뒷 요소들만 한 칸씩 인덱스를 이동시키면 되는 것이었다.

clear함수

void clear(vector*v) {
	free(v);
	v->data == NULL;
	v->size = 0;
}

방심하다 실수한 문제
data와 size는 초기화 해주었으나, 이후 코드를 읽다보니 malloc으로 계산해놓은 메모리를 해제하지 않은 실수를 발견하였다.

empty함수

bool empty(const vector* v) {
	if (v->size == 0)return true;
	else
		return false;
}

n년만에 c언어를 하다보니 헤더명을 까먹고 로드 안해서 한참 헤맸다.
c언어에서는 bool을 쓰기 위해서 #include <stdbool.h>헤더를 불러와야한다.

태그:

카테고리:

업데이트:

댓글남기기