fill_n은 memset처럼 단순히 특정 주소와 바이트 수를 넘겨주는 방식이 아닌 형식에 맞추어 하나씩 값을 대입하는 방식이기 때문입니다. visited의 각 원소는 하나의 char가 아닌 1차원 배열 char[50]이기 때문에 값을 대입할 수 있는 형태가 아닙니다.
1012번 - 유기농 배추
memset은 단순히 특정 범위의 메모리 영역의 모든 바이트를 특정한 값으로 채우는 역할입니다. 1바이트 단위로만 채우기 때문에 2바이트나 4바이트 등으로는 할 수 없습니다.
fill_n은 채우려는 배열의 자료형에 맞게 그 자료형에 해당하는 값을 n개 차례대로 넣어주는 함수입니다. 2차원 배열에는 일반적인 방법으로는 쓸 수 없는데, 그 이유는 위에서 말씀드린 것처럼 2차원 배열의 각 원소는 1차원 배열이기 때문입니다. 배열을 다른 배열에 직접 대입할 수는 없습니다. 대신 vector를 쓰는 등의 다른 방법을 사용해야 합니다.
둘을 비교하자면 memset은 메모리 주소를 가지고 직접적으로 바이트 하나 하나를 지정하는 저수준의 메모리 관리 함수이고, fill_n은 C++ 언어 수준에서 자료형을 고려하여 그 자료형에서 정의한 대입 연산자를 사용하는 고수준의 함수입니다.
댓글을 작성하려면 로그인해야 합니다.
dudwls901 2년 전
안녕하세요
memset함수로 배열 초기화 해서 통과하긴 했는데,
fill_n을 사용하면 왜 컴파일 에러가 뜨는 지 모르겠어요ㅜㅜ