2013-04-29 3 views
0

메서드 내에서 인수를 변경 가능합니까?메서드 내에서 변경 인수

int NumSet::max() 
{ 
    int i, temp=1; 
    for (i=0;i<5;i++) 
    { 
     if (_num[i]>temp) temp=_num[i]; 
    } 
    return temp; 
} 

같은 방법을 사용하여 _num 배열에 대해 _num2을 (를) 사용하려고합니다. 덕분에 !

+0

두 종류의 array-likes는 어떤 타입입니까? – cdhowie

답변

2

표준 인 대신 std::max_element() 사용을 고려 시퀀스에서 가장 큰 요소를 찾는 라이브러리 알고리즘. 일반적으로 표준 라이브러리 기능을 사용하여 코드 중복을 피하는 것이 좋습니다. 자신의 알고리즘을 사용하면 버그를 도입 할 수있는 좋은 기회가 제공되므로 표준 라이브러리를 사용하면 코드를보다 표현력 있고 쉽게 읽을 수 있습니다.

만약 _num_num2있는 배열 (int[]는) 당신은 할 수 :

// Consider replacing the magic number 5 with a symbolic constant or variable. 
int result = *(std::max_element(_num, _num + 5)); 

가 STL 컨테이너 (예 : std::vector<int> 등) 어떤 종류의 경우, 다음 :

int result = *(std::max_element(_num.begin(), _num.end())); 

당신이 만약 자신 만의 롤을 만들고 싶다면, 어떤 종류인지에 따라 일종의 참조 또는 배열에 대한 포인터를 전달하면됩니다. 이 멤버 변수가 벡터 (std::vector<int>)라고 가정합시다. 그러한 구현 될 수있다 :

int NumSet::max(std::vector<int> const & sequence) 
{ 
    int i, temp=1; 
    for (i=0;i<5;i++) 
    { 
     if (sequence[i]>temp) temp=sequence[i]; 
    } 
    return temp; 
} 

(..이 벡터는 적어도 다섯 가지 요소를 가지고 있다고 가정 그것이 범위를 벗어날 조건에 취약으로 나는이 코드를 사용하는 것이 좋습니다 않을 것이다)

+1

C++ 11 사용자라면'std :: begin (_num)'과'std :: end (_num)'으로 일반화 할 수 있습니다. – Xymostech

0

예, 다른 배열에도 같은 방법을 사용할 수 있습니다. 당신은 당신의 방법에 인수로 배열을 전달해야합니다

int NumSet::max(int* num, size_t n) 
{ 
    if(n == 0) // if array is empty 
     return 0; // or something different 

    int i, temp= num[0]; 
    for (i=1;i<n;i++) 
    { 
     if (num[i]>temp) temp = num[i]; 
    } 
    return temp; 
} 

그럼 그냥 다른 인수를 두 번 호출 대안으로

int max1 = max(_num, size_of_num); 
int max2 = max(_num2, size_of_num2); 
+1

당신은 int * _num을 의미 했습니까? – 4pie0

+1

저는'_num'이 멤버 변수라고 생각합니다. 그가 무엇을 요구하고 있는지 명확하지 않다. – stardust