【发布时间】:2016-07-19 06:03:29
【问题描述】:
我创建了这个函数,它适用于向量、链表和双链表。该函数接受一个值并在容器中搜索它。如果 vlaue 在容器中,则该函数将在它已经存在的位置旁边插入该值。所以,如果val=2 那么{3,2,5} 将变成{3,2,2,5}。但是如果容器中不存在该值,则改为添加到后面。
我使用迭代器编写了这个函数。它与向量一起工作得很好,但是当我尝试使用列表或双链表运行它时,我在if (*it==val) 行收到一个 Exc Bad Access 错误。我没有看到我做错了什么。
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 的结束元素。
标签: c++ linked-list iterator exc-bad-access