对迭代器使用 auto

Using auto for iterators

本文关键字:auto 迭代器      更新时间:2023-10-16

我有以下代码:

template<typename ty>
bool vector_has(const std::vector<ty> &in_vector, const ty element) {
  for(auto it = std::cbegin(in_vector); it != std::cend(in_vector); it++) 
    if(*it == element) return true;
  return false;
}

我已经给出了it类型的auto.Visual Studio似乎不知道那是什么(在运行之前)...it的类型是什么?

>it具有从返回类型std::cbegin(std::vector<ty>)推导出的类型std::vector<ty>::const_iterator

begincbegin将为常量向量生成与输入相同的迭代器。

另一方面,我认为您应该使用基于范围的 for 循环,因为它不那么冗长:

template<typename ty>
bool vector_has(const std::vector<ty> &in_vector, const ty element) {
  for(auto const & val : in_vector) 
    if(val == element) return true;
      return false;
}

PS:我还建议您通过常量引用传递element以避免复制:const tv & element