Это действительно ... но цикл for, вероятно, не то, что вы хотите. Когда вы используете два цикла for, ваш внутренний цикл продолжает возвращаться к началу каждый раз, когда внешний цикл повторяется. Так что, если ваши векторы содержат:
farray: 10 9 8 4 3
sarray: 7 6 4 3 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
потому что вы тестируете каждую комбинацию и добавляете большую в окончательный список. Лучшим решением может быть запоминание итератора для каждого списка и использование только одного цикла. Вместо того, чтобы зацикливаться на списке, просто просмотрите оба из них вместе - если 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++;
}
}
Я не проверял это - и если это для домашней работы, то пожалуйста попытайтесь понять, что я сделал, уйдите и напишите это самостоятельно, а не копируйте + вставляйте.