kimdongwook   2년 전

안녕하세요 항상 배열을 사용하여 알고리즘을 푸는 습관을 들였는데 

 라인 코딩시험에 해당 문제와 같이 vector를 이용하여 다음과 같은 코드가 미리 작성되어

있어 당황했던적이 있습니다. 

코딩시험을 위해 vector를 꼭 사용할줄알아야하는지 궁금하고

&은 포인터로써 해당 변수의 주소값으로 알고있는데 

long long sum(std::vector &a) 과 같이 매개변수 선언시 

&을 하고 안하고의 차이가 궁금합니다 ! 

조건, 반복문 이후 기본이 안잡혀있어서 어디부터 손대야할지 모르겠습니다 ㅠㅠ

djm03178   2년 전

vector는 일반 배열이 할 수 있는 거의 모든 것을 할 수 있고 속도 면에서도 거의 차이가 없으며 다양한 편의 기능도 제공하기 때문에 알아두는 것을 적극 권장합니다. 많은 코딩테스트들에서 C++의 경우 배열을 vector로 넘겨주는 것 또한 매우 흔합니다.

&에 대해서는 참조자를 공부해보시면 될 것 같습니다.

kimdongwook   2년 전

답변 감사합니다 !

kimdongwook   2년 전

안녕하세요 방금 참조자에 대해 좀 알아봤는데요 ! 

현재 문제의 참조자를 활용한 매개변수에 대한 질문이 있습니다 !

long long sum(std::vector &a) 

이부분에서 

&a뜻은 main에서 쓰인 vector의 주소값을 가져와서 그대로 활용한다는건데

return을 long long sum() 이라는 함수내에서 ans값을 반환하기 때문에 

&를 활용하여 주소를 참조하지 않고 다음과 같이 

long long sum(std::vector a)

와같이 단순히 a변수를 만들어 값만 받아와서 사용해도 되지 않나요? 

이렇게 해봤는데 컴파일 에러라고 나오네요 

왜 틀린건지 궁금합니다 !

kimdongwook   2년 전

감사합니다 참고하겠습니다 !

bupjae   2년 전

1. 채점 프로그램이 원하는 함수는 long long sum(std::vector<int>) 가 아니라 long long sum(std::vector<int>&) 입니다.

채점 프로그램이 원하는 함수를 찾을 수 없기 때문에 컴파일 에러가 발생한 것입니다.

   

2. 함수에 인자를 넘겨줄 때 & 기호를 쓰지 않는 것을 "Call by value" 라고 부르고, & 기호를 쓴 것을 "Call by reference" 라고 부릅니다.

& 기호를 쓰면 vector 의 주소만 함수에 넘겨주지만, & 기호를 쓰지 않으면 vector 의 모든 내용을 복사한 뒤 함수에 넘겨줍니다.

kimdongwook   2년 전

여행 다녀오느라 이제 확인했네요 ㅠ

답변 감사합니다 참조자 역할에 대해 알고나니 흥미롭네요 

댓글을 작성하려면 로그인해야 합니다.