Несомненно, некоторые из вас видели мою недавнюю публикацию, касающуюся одной и той же программы. У меня все время возникают проблемы. Повторяю: все еще учащиеся, не очень продвинутые, не очень хорошо понимают указатели, не беря класс, вообще не понимают концепции ООП и т. Д. Этот код просто объединяет два отсортированных вектора, farray и sarray, в один отсортированный вектор. По крайней мере, я надеюсь, что так оно и есть. Скажите мне:Является ли хорошей формой для сравнения с изменением значений в цикле в C++?
//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 :: вектор :: итераторы это & & ITER за мои последние два, если заявления, если цикл может изменить их на своем следующем проходе ?
- Будут ли значения iter и it изменяться на последнем проходе этого цикла и испортить мой код? Помещает мои последние утверждения if перед сопоставлением * it и * iter?
- Выполняет ли функция-член end() последнее значение того, что его вызывает? Похоже, что он каким-то образом простирается.
EDIT: я отвечу на все ответы завтра, чтобы проверить, если вы хотите услышать больше. Прошло полночь. Спокойной ночи.
Для циклов в ваших последних двух операциях if, кажется, сломаны - как написано, они просто будут продолжать увеличивать «i» навсегда. Я предполагаю, что вы имели в виду что-то вроде «for (; iter
goldPseudo
Вы правы, я просто привык к работе с массивами и стандартной системой итераций для них, которые я не думал об этом , – jkeys