gpt4 book ai didi

c++ - EXC 对迭代器的错误访问

转载 作者:行者123 更新时间:2023-11-27 22:52:11 25 4
gpt4 key购买 nike

我创建了这个适用于 vector 、链表和双链表的函数。该函数获取一个值并在容器中搜索它。如果 vlaue 在容器中,则该函数会将值插入到已存在的位置旁边。因此,如果 val=2,则 {3,2,5} 将变为 {3,2,2,5}。但如果容器中不存在该值,则将其添加到后面。

我使用迭代器编写了这个函数。它适用于 vector ,但当我尝试使用列表或双链表运行它时,我在 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 语句的建议非常有效!

最佳答案

改变

if (*it == val)

到:

if (it != x.end())

如果在容器中没有找到 val,当 it == x.end() 时循环将结束。它指向数组的末尾,因此通过它进行间接访问会导致未定义的行为。

关于c++ - EXC 对迭代器的错误访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com