我正在使用find()函数测试std :: list。在我将它实现到我的程序之前,我想看看它们是否会像我认为的那样工作。起初效果很好: `
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(9);
list<int>::iterator it = find(l.begin(), l.end(), 9);
if (*it == 9)
{
cout << "Found";
}
else
{
cout << "Not Found";
}
在这个例子中,输出是“Found”,这是正确的,但当我这样做时:
list<int> l;
l.push_back(1);
l.push_back(2);
l.push_back(9);
list<int>::iterator it = find(l.begin(), l.end(), 3);
if (*it == 9)
{
cout << "Found";
}
else
{
cout << "Not Found";
}
它不输出任何内容,但它应该输出“Not Found”,我得到一个“Debug Assertion Failed!”错误,它说“表达式:列表迭代器不能解除引用”,我怎么能解决这个问题?
答案 0 :(得分:5)
std::find
返回end()
迭代器。并且像在此处一样去除end()
迭代器:
if (*it == 9)
是未定义的行为。要查看是否找到了元素,请检查结束迭代器:
if (it != l.end())
{
cout << "found\n";
}