同じプログラムに関する私の最近の投稿をご覧になった方もいらっしゃると思います。私はそれに問題を抱え続けています。繰り返しますが、まだ学習中、あまり進んでいない、ポインターをよく理解していない、クラスを受講していない、OOP の概念をまったく理解していないなどです。ベクター。少なくとも、それが機能することを願っています。教えて:
//int num is to find the size of the original vector and
//build up farray and sarray; not used in the merge process
int num = original.size()
std::vector<int> final;
std::vector<int>::iterator it = farray.begin();
std::vector<int>::iterator iter = sarray.begin();
//farray.size() == (0 thru (num / 2))
//sarray.size() == ((num / 2) thru num)
for (;it != farray.end() && iter != sarray.end();) {
if (*it > *iter) {
final.push_back(*it);
it++;
}
else
{
final.push_back(*iter);
iter++;
}
if (it == farray.end()) {
for (int i = 0; iter < sarray.end(); i++) {
final.push_back(*iter);
}
}
if (iter == sarray.end()) {
for (int i = 0; it < farray.end(); i++) {
final.push_back(*iter);
}
}
}
マージソート関数のマージ部分を書き直して...まあ、それが機能するようにしました。実際、このコードについていくつか質問があります。
- for ループが次のパスでステートメントを変更する可能性がある場合、最後の 2 つの if ステートメントを std::vector::iterators it && iter と比較するのは良い形式ですか?
- このループの最後のパスで iter と it の値が変更され、コードが台無しになりますか? *it と *iter の比較の前に、最後の if ステートメントを配置しますか?
- end() メンバー関数は、それを呼び出しているものの最後の値を参照していますか? 何とかそれを超えて伸びそうです。
編集: 明日すべての返信に返信しますので、詳細をお知りになりたい場合はその時点で確認してください。真夜中過ぎです。おやすみ。