<질문>
벡터를 함수에 대한 인수로 보내려고하는데 어떻게 작동하는지 알 수 없습니다. 여러 가지 방법을 시도했지만 모두 다른 오류 메시지를 표시합니다. 이 부분 만 작동하지 않기 때문에 코드의 일부만 포함합니다. (벡터 "random"은 0에서 200 사이의 임의의 값으로 채워지지만 정렬 됨)
코드 업데이트 :
#include
#include
#include
#include
using namespace std;
int binarySearch(int first, int last, int search4, vector& random);
int main()
{
vector random(100);
int search4, found;
int first = 0;
int last = 99;
found = binarySearch(first, last, search4, random);
system("pause");
return(0);
}
int binarySearch(int first, int last, int search4, vector& random)
{
do
{
int mid = (first + last) / 2;
if (search4 > random[mid])
first = mid + 1;
else if (search4 < random[mid])
last = mid - 1;
else
return mid;
} while (first <= last);
return -(first + 1);
}
<답변1>
벡터를 참조 또는 포인터로 전달할 것인지 여부에 따라 다릅니다 (값으로 전달하는 옵션을 분명히 바람직하지 않은 것으로 무시합니다).
참고로 :
int binarySearch(int first, int last, int search4, vector& random);
vector random(100);
// ...
found = binarySearch(first, last, search4, random);
포인터로서 :
int binarySearch(int first, int last, int search4, vector* random);
vector random(100);
// ...
found = binarySearch(first, last, search4, &random);
binarySearch 내에서. 또는-> 그에 상응하는 임의의 구성원에 액세스합니다.
현재 코드의 문제
<답변2>
벡터 자체가 아니라 벡터에 대한 포인터를 전달해야합니다. 여기에 추가 '&'가 있습니다.
found = binarySearch(first, last, search4, &random);
<답변3>
포인터 * 무작위를 전달하고 있지만 참조 및 무작위처럼 사용하고 있습니다.
포인터 (당신이 가지고있는 것)는 "이것은 임의의 주소를 포함하는 메모리의 주소입니다"라고 말합니다.
참조는 "이것은 임의의 주소입니다"라고 말합니다.
<답변4>
컬렉션 (또는 포인터 또는 참조)을 함수에 전달하고 싶을 때마다 두 개의 반복자를 대신 전달할 수 없는지 자문 해보십시오. 그렇게함으로써 함수를 더욱 다양하게 만들 수 있습니다 (예 : 필요할 때 다른 유형의 컨테이너에있는 데이터로 작업하는 것을 사소하게 만들 수 있습니다).
물론이 경우에는 표준 라이브러리가 이미 완벽하게 좋은 바이너리 검색 기능을 가지고 있기 때문에 그다지 의미가 없지만, 아직없는 것을 작성할 때 / 만약 다른 유형의 컨테이너에서 사용할 수 있다는 것은 종종 매우 편리합니다.
<답변5>
found = binarySearch(first, last, search4, &random);
&.
<답변6>
인수를 참조로 사용하고 있지만 실제로는 포인터입니다. 벡터 변경
<답변7>
* random 대신 random을 사용하면 코드에 오류가 발생하지 않습니다.
'개발 > C++' 카테고리의 다른 글
"계속하려면 아무 키나 누르시겠습니까?"를 시뮬레이션하는 방법 (0) | 2020.09.26 |
---|---|
C ++ 0x에서 해시 값을 어떻게 결합합니까? (0) | 2020.09.26 |
C에서 C ++ 함수를 호출하는 방법은 무엇입니까? (0) | 2020.09.26 |
C ++ 함수 템플릿 부분 전문화? (0) | 2020.09.26 |