簡體   English   中英

auto it = v.begin() 和 int it=v.begin() 的區別,其中 v 是一個向量<int></int>

[英]Difference between auto it = v.begin() and int it=v.begin(), where v is a vector<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()

推導迭代器的類型

這是因為迭代器不是整數。 迭代器是指向列表中元素的指針,如向量。

integer 只是一個整數,1、2、3、4 ...

您不能將迭代器分配給 integer,因為它們不相同。 這是一個鏈接,可以更深入地了解迭代器

auto將簡單地推斷出類型本身,因此它可以確定.begin()返回一個迭代器。

要記住兩點:

  • v.begin()是指向向量v中第一個元素的迭代器。 該迭代器作為 integer 類型的向量容器,具有std::vector<int>::iterator的形式,而不是int
  • auto關鍵字自動從其初始值設定項中獲取數據類型,並將其指定為使用它聲明的變量的數據類型。

可能的更正/替代方案?

  • 如果您希望將迭代器提取到向量中的第一個元素,則堅持使用 auto 或定義迭代器:
std::vector<int>::iterator it = v.begin();
  • 如果你想提取第一個元素,然后用它的數據類型聲明它,這將是一個int類型的向量的int :(正如你可能已經想到的,也正如 smac89 所指出的那樣)
int it = v.front();

或者您可以再次使用 auto :

auto it = v.front();

在這種情況下,由 auto 推導的it的數據類型將是int ,因為那是v.front()的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM