2011-05-13 7 views
5

contains 함수를 수행하려고하는 벡터가 있습니다. 일종의 캐스팅 오류가 발생하며 솔루션을 함께 구성 할 수 없습니다. 나는 또한 내가하고있는 일이 벡터에 가치가 있는지를 확인하는 적절한 방법인지 여부를 알고 싶다. 하지 기본 생성자를 사용하여 vector를 선언값이 벡터에 포함되어 있는지 어떻게 확인합니까? C++

#include "stdafx.h" 
#include <vector> 

static void someFunc(double** Y, int length); 
static bool contains(double value, std::vector<double> vec); 

int main() 
{ 
    double doubleArray[] = { 1, 2, 3, 4, 5 }; 
    double *pDoubleArray = doubleArray; 
    int size = sizeof doubleArray/sizeof doubleArray[0]; 

    someFunc(&pDoubleArray, size); 

    return 0; 
} 
static void someFunc(double** Y, int length) 
{ 
    std::vector<double> vec(); 

    for(int i = 0; i < 10; i++) 
    { 
     //error: 'contains' : cannot convert parameter 2 from 'std::vector<_Ty> (__cdecl *)(void)' to 'std::vector<_Ty>' 
     if(contains(*(Y[i]), vec)) 
     { 
      //do something 
     } 
    } 

} 
static bool contains(double value, std::vector<double> vec) 
{ 
    for(int i = 0; i < vec.size(); i++) 
    { 
     if(vec[i] == value) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

답변

22

가 기본 생성자의 당신은 변수를 선언 할 때 (당신이 무료 저장 공간을 할당 할 수 new를 사용할 때 선택 사항입니다 있지만), 당신이 그것을 후에 ()을 넣지 마십시오. 그래서이 라인 : 당신이 그랬던 것처럼 당신이 그것을두면

std::vector<double> vec(); 

std::vector<double> vec; 

이되어야, 그것은 그 라인이 매개 변수를 고려하지 않으며 std::vector<double>을 반환 vec라는 함수의 함수 프로토 타입이라고 생각하는 컴파일러 오류가 발생하는 이유입니다.

예, 항목을 찾는 코드가 작동합니다 (선형 검색이라고 함). 당신이, 당신이 std::find 사용하려는 경우 또한 : 당신의 벡터가 정렬 된 순서에있는 경우

if (std::find(vec.begin(), vec.end(), value) != vec.end()) 
    // found value in vec 

을, 당신은 또한 find보다 훨씬 빠른 binary_search을 사용할 수 있으며, 사용이 binary_search가를 반환 같은 제외입니다 반복자 대신 bool을 입력하십시오 (따라서 vec.end()에 대해 테스트 할 필요가 없습니다). 두 가지 중 하나를 사용하는 경우 algorithm 헤더를 포함해야합니다.

+3

+1 잘 구성된 답변입니다. 잘 했어. –

+1

굉장합니다, 잘 작동합니다! 겹쳐진 답변을 가진 다른 사람들에게도 감사드립니다! –

+0

FYI, std :: find는 일치 항목이없는 경우 마지막 요소를 반환하므로 '! = vec.end()'가 존재합니다 – xinthose

5
std::vector<double> vec(); 

이상하게도,이 수행합니다 여기

는 코드입니다. 이것은 인수를 취하지 않고 vector을 반환하는 함수를 선언합니다. 대신이 시도 :

std::vector<double> vec; 
+0

좋은 지적이지만 질문에 대답하지 않습니다. 그것이 도움이 되었기 때문에 나는 어쨌든 upvoted했을 수 있습니다. – JohnAllen

3

std::find을 사용하면 특정 값을 포함하도록 STL 데이터 구조를 확인할 수 있습니다.

관련 문제