![](/img/trans.png)
[英]What is the difference between v[0], v.begin() and v.data() of a vector v?
[英]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
關鍵字自動從其初始值設定項中獲取數據類型,並將其指定為使用它聲明的變量的數據類型。可能的更正/替代方案?
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.