如果找不到元素,std :: find会返回什么

时间:2016-04-04 19:19:58

标签: c++ algorithm c++11 iterator

根据文档,select o.orderid, o.orderdate as "Order Date", p.productname , ct.categoryname from orders o, order_details od , products p , customers c ,categories ct where od.orderid = o.orderid and p.productid = od.productid and ct.categoryid = p.categoryid and ct.categoryname = 'Seafood'; 返回

  

最后

如果没有找到任何元素。那是什么意思?它是否返回指向容器中最后一个元素的迭代器?或者它是否返回指向std::find的迭代器,即指向容器外? 以下代码打印.end(),它不是容器的元素。所以,我猜0返回容器外的迭代器。你能确认一下吗?

std::find

3 个答案:

答案 0 :(得分:9)

lastfind的第二个参数的名称。它不知道你正在使用什么类型的容器,只知道你给它的迭代器。

在您的示例中,lastvec.end(),(根据定义)不可解除引用,因为它是最后一个元素之后的一个。因此,通过取消引用它,您将调用未定义的行为,在这种情况下表现为打印输出0。

答案 1 :(得分:2)

算法适用于范围,它由一对迭代器定义。这些迭代器作为参数传递给算法。第一个迭代器指向范围中的第一个元素,第二个参数指向范围结束时的第一个元素。可能失败的算法在失败时返回过去迭代器的副本。这是std::find的作用:如果没有匹配的元素,则返回第二个参数。

请注意,上一段使用单词" container"。容器具有成员函数,为您提供可用于获取容器元素的范围,但也有创建与任何容器无连接的迭代器的方法。

答案 2 :(得分:1)

根据this文档,它字面上说:

“返回值: Iterator到满足条件的第一个元素,如果没有找到这样的元素,则为last。“

在你的情况下,它是向量的一个,.end()