sort(v.begin(), v.end(), cmp);에서 cmp는 class DAY의 멤버함수로 선언되어 있습니다. 멤버함수는 호출하기 위해서는 인스턴스가 필요합니다. cmp를 static으로 선언해주거나 전역으로 바꾸면 문제가 해결됩니다.
5635번 - 생일
vector::resize()를 호출하느냐의 차이인 것 같은데요. resize()를 호출하는 경우에는 GCC에서 내부적으로 std::vector<DAY::INFO, std::allocator<DAY::INFO> >::_M_default_append(unsigned long)를 이용해서 할당을 하는데, 생성자에서 크기를 지정한 경우에는
void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<INFO*, std::vector<INFO, std::allocator<INFO> > >, __gnu_cxx::__ops::_Val_comp_iter<bool (*)(INFO const&, INFO const&)> >(__gnu_cxx::__normal_iterator<INFO*, std::vector<INFO, std::allocator<INFO> > >, __gnu_cxx::__ops::_Val_comp_iter<bool (*)(INFO const&, INFO const&)>)
라는 좀 더 Optimize된 내부 루틴을 이용해서 초기화를 합니다. constructor는 초기 상태에 컨데이너가 비어 있다고 assume을 할 수 있어서 이런 Optimization이 가능하지 않나 조심스럽게 추측해 봅니다. resize()는 이미 있는 원소들에 대해서 처리를 해줘야 하니까요.
클래스를 사용했냐 안 했냐와는 관련이 적고요, 이 문제를 해결하기 위해서는 다음과 같이 initialization list를 사용하면 됩니다. 이렇게 하면 멤버변수에 대한 생성자를 호출할 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
olbbemi 5년 전
Init() 함수에서 sort 수행하는데 sort에 오버로드된 함수가 없다고 자꾸 뜨는데. 뭐가 문제인가요..
c++ 배우면서 코드 연습하고잇는데 참 어렵습니다. 책이나 인터넷 검색했는데 안나와서 질문드려봅니다.