これは有効ですが、forループはおそらくあなたが望むものではありません。 2つのforループを使用すると、内側のループは、外側のループがループするたびに最初に戻ります。あなたはすべての単一の組み合わせをテストし、最終リストに1より大きいを追加しているので、
10 10 10 10 10 9 9 9 9 9 8 8 8 8 8 7 6 4 4 4 7 6 4 3 3
:だからあなたのベクトルが含まれている場合:
farray: 10 9 8 4 3
sarray: 7 6 4 3 1
そして、最終的な配列のようなものが含まれます。より良い解決法は、各リストのイテレータを覚えて、ただ一つのループを使うことです。リストをループするのではなく、両方とも一緒に行く - もしsarrayが大きいならば、あなたのsarrayイテレータを増やして、それを古いfarrayイテレータと比較する。 sarrayとfarrayの両方が空の場合、ループを止めてください。
vector<int> fiter = farray.begin();
vector<int> siter = sarray.begin();
vector<int> final;
// Let's traverse both farray and sarray.
// We'll want to stop this loop once we've traversed both lists.
while (fiter != farray.end() && siter != sarray.end())
{
if (fiter == farray.end())
{
// we must have gone right through farray -
// so use the value from sarray, and go to the next one
final.push_back(*siter);
siter++;
}
else if (siter == sarray.end())
{
// we must have gone right through sarray -
// so use the value from farray, and go to the next one
final.push_back(*fiter);
fiter++;
}
else if (*siter > *fiter)
{
// siter is the bigger of the two - add it to the final list, and
// go to the next sarray entry
final.push_back(*siter);
siter++;
}
else // *fiter >= *siter
{
// fiter is the bigger of the two - add it to the final list, and
// go to the next farray entry
final.push_back(*fiter);
fiter++;
}
}
私はそれをテストしていない - これは宿題のためであれば、その後、試みは、私がやったかを理解するためにしてください離れて行くと、それを自分で書くのではなく、コピー+ペースト。
イテレータなどを把握しようとしている場合は、よく知られている表記法([]演算子など)を使用して記述してから、イテレータにスワップすると便利です。しかし、反復子は理解するのが大切なので、特にマップやセットなどの他の型になるときは、[]を使用しないでください。 – Smashery