寻找乐趣的时间复杂度

时间:2018-06-26 13:45:25

标签: c++11 vector time stl c++14

您能否解释一下find函数如何在STL C ++向量中工作以及它的时间复杂度是什么?

vector<int> v;

if(find(v.begin(),v.end(),element)==v.end())
do this;
else 
do this

2 个答案:

答案 0 :(得分:2)

看看https://en.cppreference.com/w/cpp/algorithm/find

在“可能的实现”部分中,您可以了解它是如何工作的。详细信息取决于具体的实现方式,具体实现方式可能有所不同。在任何情况下,std::find()都必须顺序地遍历您的集合,这决定了时间的复杂性。即O(n)。

答案 1 :(得分:2)

来自[alg.find]

  

返回:范围为i且符合以下条件的第一个迭代器[first, last)*i == value。   如果找不到这样的迭代器,则返回last

     

复杂性:相应谓词最多last - first个应用。

这意味着它将向前进行线性扫描,直到达到与您的element相等的值为止。