2012-04-22 71 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 2012-04-22 19:39:00

+0

他們看起來大致相當於我。也許你想'我<=完成'? – jli 2012-04-22 19:39:28

+0

@chris我實際上並沒有在尋找分區功能,但我會牢記這一點。謝謝! – Ali 2012-04-22 19:39:44

回答

3

唯一的區別是,第一將不包括在輸出vec[finish],而第二意願。

0

似乎你只是從矢量複製範圍,你可以使用std :: copy。此外,對於良好的做法,儘可能傳遞const引用。正如其他人指出的,兩者之間的區別在於,第一個功能將結束視爲一個結束,而第二個結束包含結束。一般來說,您可能希望保持一致並使用第一個,因爲它與STL一致。