std :: list和find(),如果找不到使用list in list错误的item / value错误

时间:2014-07-09 18:41:32

标签: c++ algorithm list find

我正在使用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!”错误,它说“表达式:列表迭代器不能解除引用”,我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:5)

当在容器中找不到某些内容时,

std::find返回end()迭代器。并且像在此处一样去除end()迭代器:

if (*it == 9)

未定义的行为。要查看是否找到了元素,请检查结束迭代器:

if (it != l.end())
{
   cout << "found\n";
}