2012-04-22 4 views
0

차이점 또는 차이가 있는지 여부는 문자 그대로 인지 이해할 수 없었습니다. 그런데 함수는 파티션에 사용되는 함수입니다. 내가 이것을 묻는 이유는 병합 정렬을 구현하고 있기 때문에 그 아래 첫 번째 기능이 작동하지 않기 때문입니다. 둘 다 쓴다. 그러나 나는 왜 처음이 작동하지 않는지 이해할 수 없다.이 두 파티션 함수의 차이점

첫 번째 기능;

vector<int>partition(vector<int>vec,int start,int finish) 
{ 
    vector<int>list; 
    for(int i=start;i<finish;i++) 
     list.push_back(vec[i]); 
    return list; 
} 

번째 함수;

vector<int>partition(vector<int>vec,int start,int finish) 
{ 
    vector<int>parted; 
    int size=finish-start+1; 
    for(int i=0;i<size;i++) 
     parted.push_back(vec[i+start]); 
    return parted; 
} 
+2

''에는'std :: partition'이 있습니다. 당신이 쓰려고 노력하는 것보다 더 잘 작동 할 것이라고 거의 보장 할 수 있습니다. – chris

+0

그들은 내게 거의 비슷하게 보입니다. 아마 당신은'i <= finish'를 원할 것입니까? – jli

+0

@chris 저는 실제로 파티션 기능을 찾지는 않았지만이를 염두에 두겠습니다. 고맙습니다! – Ali

답변

3

유일한 차이점은 첫 번째, 두 번째 동안 의지를 출력 vec[finish]를 포함하지 않을 것이다.

0

방금 ​​벡터에서 범위를 복사하는 것처럼 보입니다. std :: copy를 사용하면됩니다. 또한 좋은 연습을 위해서 가능한 경우 const-reference를 전달하십시오. 그리고 다른 사람이 지적한 것처럼 두 함수의 차이점은 첫 번째 함수가 끝을 한 패스로 처리하고 두 번째 함수가 한 패스를 처리하는 것입니다. 일반적으로 STL과 일관성이 있으므로 일관성을 유지하고 첫 번째 문장을 사용하는 것이 좋습니다.