为什么向量的std :: find返回迭代器而不是整数位置

7 c++ std

为什么向量查找返回迭代器而不是整数值?

vector<string>::iterator itr1 = std::find(words.begin(), words.end(), word);
Run Code Online (Sandbox Code Playgroud)

Fra*_*eux 12

std::find适用于各种容器,而不仅仅是std::vector。例如,它可以使用,std::list但是该容器不允许按索引访问元素(至少不容易)。为了使其与各种容器一起使用,它需要返回所有容器都了解的东西,即迭代器。

编辑:如果要查找与给定迭代器等效的索引位置,可以使用std::distance。例如 :

std::distance(std::begin(words), itr1);

这将适用于标准容器,但对于某些容器可能会更慢。它返回容器的大小,如果没有找到该元素,因为find回报end,如果它未能找到元素之间的距离begin,并end在容器的大小。

  • @Gani是的,循环执行搜索。与其从“ begin”开始搜索到“ end”,不如将其作为迭代器替换为“ begin”。我认为标准库没有为此提供功能。 (3认同)
  • 迭代器是将容器和算法结合在一起的粘合剂。我看过几个第3方集合库,但没有一个具有迭代器。他们也没有算法,因为他们(我们)无法使它们与没有'em的足够的容器一起使用。 (2认同)