dudwls901   2년 전

안녕하세요

memset함수로 배열 초기화 해서 통과하긴 했는데,

fill_n을 사용하면 왜 컴파일 에러가 뜨는 지 모르겠어요ㅜㅜ

djm03178   2년 전

fill_n은 memset처럼 단순히 특정 주소와 바이트 수를 넘겨주는 방식이 아닌 형식에 맞추어 하나씩 값을 대입하는 방식이기 때문입니다. visited의 각 원소는 하나의 char가 아닌 1차원 배열 char[50]이기 때문에 값을 대입할 수 있는 형태가 아닙니다.

dudwls901   2년 전

절반 정도만 이해가 됐습니다ㅜ

그러면 fill_n보다 memset이 더 다양한 경우에서 쓰일 수 있는 건가요?

fill_n도  int 2차원 배열과 char 2차원 배열은 가능하고, int 형 2차원 배열에는 55,23,100 이런 숫자로도 초기화 할 수 있는 건가요?

memset과 fill_n의 쓰임을 구분하기 힘듭니다ㅜ

djm03178   2년 전

memset은 단순히 특정 범위의 메모리 영역의 모든 바이트를 특정한 값으로 채우는 역할입니다. 1바이트 단위로만 채우기 때문에 2바이트나 4바이트 등으로는 할 수 없습니다.

fill_n은 채우려는 배열의 자료형에 맞게 그 자료형에 해당하는 값을 n개 차례대로 넣어주는 함수입니다. 2차원 배열에는 일반적인 방법으로는 쓸 수 없는데, 그 이유는 위에서 말씀드린 것처럼 2차원 배열의 각 원소는 1차원 배열이기 때문입니다. 배열을 다른 배열에 직접 대입할 수는 없습니다. 대신 vector를 쓰는 등의 다른 방법을 사용해야 합니다.

둘을 비교하자면 memset은 메모리 주소를 가지고 직접적으로 바이트 하나 하나를 지정하는 저수준의 메모리 관리 함수이고, fill_n은 C++ 언어 수준에서 자료형을 고려하여 그 자료형에서 정의한 대입 연산자를 사용하는 고수준의 함수입니다.

dudwls901   2년 전

오오 자세한 설명 감사합니다.

말씀해주신 내용 바탕으로 더 찾아보고 공부해봐야겠네요!

댓글을 작성하려면 로그인해야 합니다.