C++로 ps하는 피붕이들이 바로 적용가능한 짤막한 C++ tip들을 가끔 적고 가려고 한다.
앞으로 꾸준히 적어볼까 하니까 잡설은 다음으로 미루고
오늘은 요 밑에 관련 글이 올라와서 이걸 적어볼까 한다.
배열의 길이를 구할 때 아래 코드처럼 배워서 사용하는 경우가 있을거다.
int arr[] = { 12, 11, 13, 5, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
왜냐하면 vector, list, array, map같은 STL 컨테이너들은 size() 멤버함수를 구현했는데
그냥 배열은 멤버함수가 없으니까 예전부터 저렇게 사용하거나 원소 개수를 함수 인자로 줄줄이 달고 다니는걸 봐왔다.
그런데 C++17 표준부터는 비멤버 size() 함수가 추가되었다.
그게 무슨 얘기냐 하면
int arr[] = { 12, 11, 13, 5, 6, 7 };
size(arr); // 이거 값이 6이라는 얘기다.
배열을 포인터로 전달해서 pointer decay가 발생하지 않은 경우는 이제 그 인자 개수를 size() 함수로 알 수 있다는 얘기
레거시 코드처럼 해도 되는데 그거 왜 필요하냐고?
우선, POD 타입 (sizeof로 크기를 알 수 있는 자료형) 이외의 자료형이 담긴 배열에서도 사용할 수 있다.
두번째 비멤버 함수 size()는 동일한 인터페이스로 일반 배열이건 vector건 map이건 동일하게 사용할 수 있다는거
결론
배열의 크기는
sizeof 함수로 직접 구현하지 말고 std::size() 함수를 사용하자.
아직도 sizeof 쓰는 사람 있긴 하냐
나 다니는 회사에 절반은 저 ㅈㄹ
우와 미쳤네
https://gist.github.com/clucle/6457a39989f6542ae1419dcaf296fcc8#file-session4-md
이런것도
있음
일단 회사가 C++ 17을 쓰는지부터....
ps 얘기하는 중
ps면 써야지
큰 도움이 돼었어요~
이거때문에 전역변수 네이밍 size로 못한다 ㅅㅂ
2차원 배열의 크기도 가능?
int arr[3][2]; size(arr) <- 3 size(arr[0]) <- 2 2차원 vector와 동일함
rtrt