개발/C++

벡터를 함수에 전달하는 방법은 무엇입니까?

MinorMan 2020. 9. 26. 00:47
반응형

<질문>

벡터를 함수에 대한 인수로 보내려고하는데 어떻게 작동하는지 알 수 없습니다. 여러 가지 방법을 시도했지만 모두 다른 오류 메시지를 표시합니다. 이 부분 만 작동하지 않기 때문에 코드의 일부만 포함합니다. (벡터 "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>

인수를 참조로 사용하고 있지만 실제로는 포인터입니다. 벡터 변경 * 벡터로 &. 그리고 그것을 사용하기 전에 실제로 search4를 무언가로 설정해야합니다.


<답변7>

* random 대신 random을 사용하면 코드에 오류가 발생하지 않습니다.

반응형