0
有人可以向我解釋爲什麼下面的代碼工作併產生真實? 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;
}
'iComp'評估爲'false'。所以我不明白這個問題! – 2011-04-05 23:39:48
你說得對,我沒有檢查iComp的值,只是函數中v1,v2和v3的值。我不知道是什麼原因,但在VC++ 2010 inisde中懸停在v1,v2和v3上,該函數顯示3個變量的值,所以我推測它會產生True。它不如邏輯告訴我的那樣很棒。對不起,沒有仔細檢查過。 – RandomCPlusPlus 2011-04-05 23:47:06
Visual C++有助於顯示迭代器指向*的內容。這就是你所看到的。 'v1','v2'和'v3'都是迭代器。 – 2011-04-05 23:53:09