使用auto作为迭代器

时间:2014-12-09 09:19:32

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

我有以下代码:

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的类型是什么?

2 个答案:

答案 0 :(得分:3)

it的类型std::vector<ty>::const_iterator是从std::cbegin(std::vector<ty>)的返回类型中推断出来的。

答案 1 :(得分:-1)

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

另一方面,我认为你应该使用基于范围的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;
}

P.S。:我还建议您通过const引用传递element以避免副本:const tv & element