0

それらに違いがあるのか​​ ないのか、文字通り理解できませんでした。ちなみに関数はpartitionに使う関数です。私がこれを尋ねる理由は、マージソートを実装していて、その下の最初の関数が機能しないためです。両方とも書かれていますが、最初のものが機能しない理由を理解できません

最初の関数;

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;
}

2 番目の機能。

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;
}
4

2 に答える 2

3

唯一の違いは、最初のものはvec[finish]出力に含まれず、2番目のものは含まれることです。

于 2012-04-22T19:43:11.727 に答える
0

ベクトルから範囲をコピーしているように見えますが、そのために std::copy を使用できます。また、良い習慣として、可能な場合は const-reference で渡します。そして、他の人が指摘しているように、2つの違いは、最初の関数がfinishを一方が最後を通過するものとして扱い、2番目の関数がそれを含むことです。通常は、STL と一貫性があるため、一貫性を保ち、最初のものを使用することをお勧めします。

于 2012-04-22T20:10:16.023 に答える