auto it = v.begin() 和 int it=v.begin() 之间的区别,其中 v 是一个向量<int>



当我使用int it = v.begin():时,它给了我这个错误

prog.cpp: In function ‘int findFrequency(std::vector<int>, int)’:
prog.cpp:18:32: error: cannot convert ‘std::vector<int>::iterator {aka __gnu_cxx::__normal_iterator<int*, std::vector<int> >}’ to ‘int’ in initialization
for(int iterator = v.begin();iterator!=v.end();iterator+

但它在auto it = v.begin()上运行良好,为什么?

int it = v.begin()

是错误的,因为v.begin()返回的类型是std::vector<int>::iterator而不是int

auto it = v.begin()

推导迭代器的类型

这是因为迭代器不是整数。迭代器是一个指针,它像向量一样指向列表中的元素。

整数只是一个整数,1,2,3,4…

不能将迭代器分配给整数,因为它们不相同。这里有一个链接,可以进一步了解迭代器

auto将简单地推导类型本身,这样它就可以计算出.begin()返回一个迭代器。

需要记住两点:

  • v.begin()是一个迭代器,指向向量v中的第一个元素。这个迭代器是一个整数类型的向量容器,它的形式是std::vector<int>::iterator,而不是int
  • auto关键字自动接受其初始值设定项中的数据类型,并将其指定为使用它声明的变量的数据类型。

可能的修正/替代方案?

  • 如果您希望将迭代器提取到向量中的第一个元素,那么请坚持使用auto或定义迭代器:
std::vector<int>::iterator it = v.begin();
  • 如果您希望提取第一个元素,那么用它的数据类型声明它,它将是int类型向量的int:(正如您可能想到的,也正如smac89所指出的(
int it = v.front();

或者你可以再次使用自动:

auto it = v.front();

在这种情况下,auto推导出的it的数据类型将是int,因为这是v.front()的类型。

相关内容

最新更新