강의 영상중에 이해가 안되는 부분이 있어 질문드립니다.
안녕하세요
algorithm 강의와 람다 강의를 듣고 이해가 안되는 점이 있어 질문드립니다.
1번 질문)
algorithm 강의 29:28 부분에
185번째 줄
bool operator()(int n)
이라고 되어있고
191번째줄
vector<int>::iterator it = std::remove_if(v.begin(),v.end(),IsOdd());
되어있는데
여기서 궁금한게 185번째 줄에는 IsOdd 객체의 bool operator()(int n) 함수가
매개변수 int n을 대입하도록 되어있는데
191번째 줄에는 IsOdd()만 되어있고 int n을 대입한 부분이 없는거 같은데
어떻게 컴파일러는 int n을 판단하는지 궁금합니다
------------------------------------------------------------------------
2번 질문)
람다 강의 18:23초 부분에
100번째 줄
auto findByItemLambda = [=](Item& item)
{
return item._itemId == itemId;
}
105번째 줄
auto findIt = std::find_if(v.begin(), v.end(), findByItemIdLambda);
라고 써져있는데
여기서 궁금한점이
100번째줄 람다의 매개변수인 Item& item을 전달해준 부분이
없는거 같은데 어떻게 105번째 줄에서 findByItemIdLambda만 전달해서
findByItemIdLambda의 람다함수의 매개변수인 Item& item을
어떻게 컴파일러가 알 수 있는지 궁금합니다
답변 2
1
1+2) 1, 2가 동일한 질문이네요.
Functor나 함수 포인터를 이용할 때의 장점은
실제 호출하는 시점을 뒤로 미룰 수 있다는 점인데요.
실제 remove_if 코드를 살펴보면,
마지막에 넘겨준 _Pred (IsOdd 혹은 findItemByLambda)을 if (!_Pred(*_UFirst)) 로 호출하는 것을 알 수 있습니다.
그리고 이 *_UFirst란, 첫 인자로 넘겨준 인자에 역참조를 한 것인데
첫 인자는 v.begin()이기 때문에 결과적으로 *(v.begin())은
vector<?>에서 ?타입입니다.
1번 질문에서는 vector<int>였으니 int 타입이고,
2번 질문에서는 vector<Item>이었으니 Item 타입입니다.
따라서 우리가 직접 int나 Item&을 넣어주진 않았지만,
템플릿 코드의 흐름상 자연스럽게 그렇게 호출이 된 것입니다.
참고로 두번째 케이스에서는 Item이 아니라 Item&을 인자로 받는 함수 타입을 만들어줬지만,
결과적으로 _Pred(*_UFirst))가 문법적으로 말이 되기만 하면 됩니다.
즉,
void TestFunc(Item& item) 함수가 있을 때
Item item;
TestFunc(item); 으로 사용하는 것이 100% 합법적이니 문법상 아무런 문제가 없습니다.
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
541
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
442
1
strcpy() 구현 관련 질문
0
513
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
453
1
클래스 타입의 포인터 질문합니다
0
546
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
498
1
템플릿 특수화 관련 질문
0
385
1
포인터 관련 질문합니다!
0
264
1
Unable to start assembler. Check your settings.
0
831
2
cpu선택
0
539
1
포인터 질문이 있습니다
0
324
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
585
1
iterator 삭제관련
0
406
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
310
1
15 분 45초 대 질문
0
308
0
스택 프레임 질문합니다!
2
306
1
오른값 참조 in 게임
0
384
0
동적할당 질문이 있습니다
0
450
1
안녕하세요 메모리에 대해 질문드립니다.
0
305
1
함수객체 의 매개변수
0
360
1
복사생성자
0
434
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
421
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
355
1
스택 오버플로우
2
790
1





