[英]vector iterator and template functions
有人可以向我解釋下面的代碼為什么起作用並產生true嗎? v1.begin()
產生一個迭代器,但是在調試時,如果我檢查比較函數內部的v1.begin()
值,我會看到向量的第一個元素的值。
這是否與需要使用typename vector<T>::iterator
來命名模板中的迭代器有關? 如果有人可以詳細說明這一點,那將是很好的
謝謝
template<class U, class V> bool compare(const U &v1, const U &v2, const V &v3) {
if ((v1 == v2) && (v2 == v3) ){
return 1;
} else {
return 0;
}
}
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v1(10,3);
vector<int> v2(10,3);
bool iComp = compare(v1.begin(), v1.begin() + 2, v2.begin());
cout << typeid(v1.begin()).name() << " " << *v2.begin() << endl;
return 1;
}
當且僅當所有三個迭代器都指向同一個對象時, compare
返回true
。 如果迭代器指向不同類型的對象,則可能會出現編譯錯誤。
迭代器指向不同的對象,因為參數都不同,所以compare
返回false
。 這個結果被扔掉了。
然后程序打印一個唯一的字符串,標識類型為std::vector< int >::iterator
。 如果<vector>
實現使用typedef T *iterator
,則這可能是一個很長的字符串,其中提到了片段std
, vector
和iterator
,或者對於“指向整數的指針”可能只是pi
。
最后,它打印10
因為那是v2
的第一個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.