2016-11-03 78 views
-1

我假設迭代器已經重載了它們的operator +和operator-來返回一個迭代器。我還假設,迭代器已經超負荷運營商INT(),它做了如下編譯:std :: iterator的運算符

std::vector<int> v; 
v.push_back(1); 
v.push_back(2); 
v.push_back(3); 

std::vector<int>::iterator low = std::lower_bound(v.begin(), v.end(), 2); 

int i = low - v.begin(); 

但是,當我試圖將結果分配到一個迭代器,而不是一個int我得到一個編譯錯誤:

std::vector<int>::iterator i = low - v.begin(); 

爲什麼不從另一個迭代器中減去另一個迭代器?

我無法找到關於cplusplus.com/reference或任何其他地方的任何信息,正是迭代器的接口包含的內容。

+5

迭代器的語義是兩個其他迭代器的區別是什麼? – user888379

+0

你應該發佈編譯器錯誤。另外,如果減去兩個迭代器產生一個迭代器,那麼給定你的邏輯,那麼簡單的指針(它們*被認爲是迭代器)相互相減將產生一個指針。但事實並非如此。 – PaulMcKenzie

+1

有距離函數返回兩個迭代器之間的元素數量 –

回答

4

「爲什麼不從另一個迭代器中減去一個迭代器?」

爲什麼它減去2個指針不會導致另一個指針。

如果有什麼我希望它返回包含要素爲單位的2個迭代器之間的距離 - 即一個int

和快速測試顯示,它返回的距離

vector<int> test; 
test.push_back(1); 
    test.push_back(2); 
int d = test.begin() - test.end(); 
cout << d; 
return 0; 

說:-2

+0

當想到一個迭代器作爲指針,它是有道理的,從另一個減去另一個會返回距離,而不是另一個迭代器/指針。謝謝! –

相關問題