이렇게 고쳐보세유
1620번 - 나는야 포켓몬 마스터 이다솜
이렇게 고쳐보세유
앗 맞았어요
혹시 이유가 뭔지 알려주실 수 있나요??
벡터를 고대로 넘기는 것 = 크기가 어마어마한 것을 통째로 넘기는 것 이라고 생각하심 편할 거 같아요.
일단 여기까지만 답변드리고 나머지는 더 찾아볼게요.
아래 프로그램을 실행하면 결과는 1이 나옵니다.
아. 수족관 어렵네요.
제가 봤을 때는 이런 거 같습니다. 정확하진 않겠지만..
일단 위 예제에서는 vector <int> v를 넘겨버렸습니다.
그리고 foo에서 받죠. callee의 인자가 v니까유.
foo함수의 v = main 함수의 v가 됩니다. 벡터의 대입 연산이죠.
이건 연산자 override 되어있습니다.
이 사이트를 보세요.
http://www.cplusplus.com/refer...
분명한 건 복잡도가 size에 비례한다고 되어 있습니다. 즉 할당한다는 소리겠지요.
그런데 &로 줘버리면. &는 별명입니다.
int chogahui=9;
int &chokw = chogahui; 라고 한다면 chokw의 별명은 chogahui가 되는 거죠.
그러니까
저를 chokw로 부르던.. chogahui로 부르던. 저를 부르는 건 똑같잖아요. 그런 것이랑 마찬가지라 생각하심 됩니다.
어찌 되었던, callee의 v는 main에 있는 벡터 v의 별명이므로, 사실상 같은 공간을 가리키고 있게 됩니다.
따라서, 추가적인 할당이 안 일어나겠지요.
아 오버라이드 연산자 들어본 거 같습니다.
상세한 설명 감사합니다!!! 이렇게 또 하나 배워갑니다 ㅎㅎㅎ
댓글을 작성하려면 로그인해야 합니다.
knight7024 6년 전
벡터 페어를 문자열로 정렬해서 이진 검색하는 소스입니다.
cin과 cout이 시간 초과 난대서 scanf, printf로 바꾸었습니다.
16%에서 시간 초과가 나는데 다른 분들은 map 쓰셨더라구요.
벡터 std::sort 로는 못 푸나요?