1. Можно сравнивать итераторы из того же контейнера, что и условие цикла for, но это имеет смысл только в том случае, если вы перемещаете тот или иной итератор либо в инкрементной части оператора for цикла, либо в теле самого цикла for. В этом цикле for вы сравниваете iter
с sarray.end()
, но цикл for никогда не меняется iter
. Это означает, что либо не будет итераций, либо цикл for никогда не завершится. Кроме того, вы, вероятно, хотите использовать !=
, а не <
для сравнения. ==
и !=
работают для всех итераторов, <
не работает.
for (int i = 0; iter != sarray.end(); i++) {
final.push_back(*iter);
}
Когда iter
начинается там, где вы хотите начать цикл, вы можете захотеть что-то вроде этого:
for (; iter != sarray.end(); ++iter) {
final.push_back(*iter);
}
Поскольку вы все еще учитесь (хотя не мы все!), Возможно, полезно поработать с алгоритмом, подобным этому, но вы должны знать о std::merge
, который, вероятно, делает то, что вы хотите.
std::merge( farray.begin(), farray.end(), sarray.begin(), sarray.end(), std::back_inserter( final ) );
(Вам нужно #include <iterator>
и <algorithm>
.)
2. Я не вижу увеличения iter или его во внешнем цикле for, делающего недействительной логику в последующем цикле for, в точке 1. в сторону.
3. end()
указывает на один конец конца контейнера, так что вы можете использовать его для проверки завершения цикла, но вы не должны пытаться разыменовать итератор с "==
" до ".end()
".