Я создал эту функцию, которая работает с векторами, связанными списками и двойными связанными списками. Функция принимает значение и ищет его в контейнере. Если vlaue находится в контейнере, то функция будет вставлять значение рядом с тем, где оно уже существует. Итак, если val=2
, то {3,2,5}
станет {3,2,2,5}
. Но если значение не существует в контейнере, оно добавляется обратно обратно.EXC Плохой доступ с итераторами
Я написал эту функцию, используя итераторы. Он отлично работает с вектором, однако, когда я пытаюсь запустить его со списком или двойным связанным списком, я получаю ошибку «Исправить ошибки» в строке if (*it==val)
. Я не вижу, что я сделал неправильно.
template <class Container, class T>
void insertNextTo(Container &x, const T &val){
typename Container::iterator it = x.begin();
while (it!=x.end() && *it!=val){
++it;
}
if (*it == val){
x.insert(it, val);
}
else{
x.push_back(val);
}
}
Редактировать: Спасибо всем! Ваше предложение изменить заявление if
отлично работало!
Если 'val' не найден, то условие' if' приводит к тому, что конечный элемент приводит к UB. – Mahesh