ベクトルのマージ関数を実装しました。これは基本的に、ソートされたベクトルを 1 つのソートされたベクトルに結合します。(はい、マージソートアルゴリズム用です)。コードを高速化し、オーバーヘッドを回避しようとしていたため、ベクターで push_back メソッドを使用せず、代わりにオーバーヘッドの少ない配列構文を使用することにしました。しかし、何かがひどく間違っていて、これを行うと出力がめちゃくちゃになります。コードは次のとおりです。
while(size1<left.size() && size2 < right.size()) //left and right are the input vectors
{
//it1 and it2 are iterators on the two sorted input vectors
if(*it1 <= *it2)
{
final.push_back(*it1); //final is the final vector to output
//final[count] = *it1; // this does not work for some reason
it1++;
size1++;
//cout<<"count ="<<count<<" size1 ="<<size1<<endl;
}
else
{
final.push_back(*it2);
//final[count] = left[size2];
it2++;
size2++;
}
count++;
//cout<<"count ="<<count<<" size1 ="<<size1<<"size2 = "<<size2<<endl;
}
2つの方法は機能的に同等であるべきだと私には思えます。
PS私はすでに最終ベクトル用のスペースを予約しているので、問題にはなりません。