Простое изменение содержащихся объектов не делает итераторов недействительными, поэтому этот код безопасен. Однако нет необходимости самим писать цикл, поскольку есть алгоритм std::move
:
#include <algorithm>
#include <iterator>
template<typename InContainer, typename OutContainer>
void append_back(InContainer& some_list, OutContainer& other_list)
{
using std::begin;
using std::end;
std::move(begin(some_list), end(some_list), std::back_inserter(other_list);
some_list.clear();
}