Несомненно, некоторые из вас видели мою недавнюю публикацию, посвященную одной и той же программе. Я постоянно сталкиваюсь с проблемами. Повторюсь: все еще учусь, не очень продвинутый, не очень хорошо понимаю указатели, не беру класс, вообще не понимаю концепций ООП и т. Д. Этот код просто объединяет два отсортированных вектора, farray и sarray, в один отсортированный вектор. По крайней мере, я надеюсь, что это то, что он делает. Скажите мне:
//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);
}
}
}
Я переписал часть слияния моей функции сортировки слиянием, чтобы ... ну, чтобы она работала. На самом деле у меня есть несколько вопросов по этому коду:
- Является ли хорошим тоном сравнивать с std :: vector :: iterators it && iter для моих последних двух операторов if, если цикл for может изменить их на следующем проходе?
- Изменится ли значения iter и it на последнем проходе этого цикла и испортят ли мой код? Буду ли помещать мои последние операторы if перед сравнением * it и * iter?
- Обращается ли функция-член end () к последнему значению того, что ее вызывает? Кажется, что это могло как-то выйти за рамки этого.
РЕДАКТИРОВАТЬ: Я отвечу на все ответы завтра, так что загляните потом, если хотите услышать больше. Уже за полночь. Доброй ночи.