有人可以向我解释为什么下面的代码可以正常生成吗? v1.begin()
生成一个迭代器,但在调试时,如果我在compare函数中检查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;
}
答案 0 :(得分:1)
compare
才返回true
。如果迭代器指向不同类型的对象,则可能存在编译错误。
迭代器指向不同的对象,因为参数都是不同的,因此compare
返回false
。这个结果被扔掉了。
然后程序打印一个标识类型std::vector< int >::iterator
的唯一字符串。如果{{1实现使用std
。
最后打印vector
,因为这是iterator
中的第一个值。