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