2016-09-12 3 views
-3

(이 순서대로) 매개 변수로 다음 취하는 함수 호출 발견 구현 :템플릿 기반 선형 검색

우리가 배열 내에서 모든 유형 배열의 크기의 동적 배열을 발견 할 개체를 이 함수는 지정된 요소에 대해 배열을보고 요소의 인덱스 위치를 반환해야합니다. 요소가 없으면 함수는 -1을 반환해야합니다. 내가 가진

코드는 다음과 같습니다

template<typename t> 
t find(t objectInArray, t *array, int arraySize) 
{ 
    array = new t[arraySize]; 

    for(int index = 0; index < arraySize; index++){ 
     if(array[index] == objectInArray){ 
     cout << index; 
     return index; 
     } 
    } 
    return -1; 
} 

내가 템플릿없이, 주 사용 INT에서이 코드를 실행하고 완벽하게 작동합니다. 나는 실제로 내 코드에 문제가있는 것을 당혹 스럽다.

+0

[mcve]를 게시하십시오. 또한, 1) 왜 '-1'을 반환합니까? 만약 당신이 찾고있는 타입이'std :: string'이라면? 그'-1' 반환 값은 컴파일되지 않습니다. 2) 왜'new []'를 사용하고있어 메모리 누수가 발생합니까? – PaulMcKenzie

+0

추가하려면 [std :: find] (http://en.cppreference.com/w/cpp/algorithm/find)가 이미이 작업을 수행합니다. – PaulMcKenzie

+0

함수't'의 반환 유형을'int'로 변경했습니다. 객체가 배열에 있으면 index를 반환한다고 가정합니다. 그렇지 않으면 객체가 배열에없는 경우 -1을 반환한다고 가정합니다. – hicu0

답변

1

포인터를 다시 할당하지 마십시오. 이 행을 삭제하십시오.

array = new t[arraySize]; 

반환하려는 것은 색인입니다. 따라서 반환 유형은 t이 아니어야합니다. 정수형을 반환합니다.


사이드 참고 :

는 당신은 아마 new 표현식을 사용하여 동적 배열을 만들려면 선생님이나 책으로 전해지고 있습니다. 당신은 귀하의 주요 기능에 하나를 작성했을 수 있습니다. 나는 학생들이 보통 선택의 여지가 없지만 기억 누출의 위험 때문에 지역 사회의 일반적인 충고에 반하는 것이라고 지적해야한다. new을 사용해야하는 경우 해당하는 delete을 제공해야합니다.

+0

'new '호출은 OP 코드의 메모리 누수입니다. 그것은 전혀해서는 안됩니다. – PaulMcKenzie

+0

@PaulMcKenzie 부두 노트를 추가하면 괜찮을 것이라고 생각합니다. –

+0

'array = new t [arraySize]; 행을 꺼내면 for 루프가 배열의 모든 요소를 ​​통과하는 데 어떻게 사용할 수 있습니까? – hicu0