矢量迭代器和模板函数

时间:2011-04-05 23:36:19

标签: c++ templates vector iterator

有人可以向我解释为什么下面的代码可以正常生成吗? 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;
}

1 个答案:

答案 0 :(得分:1)

当且仅当所有三个迭代器指向同一个对象时,

compare才返回true。如果迭代器指向不同类型的对象,则可能存在编译错误。

迭代器指向不同的对象,因为参数都是不同的,因此compare返回false。这个结果被扔掉了。

然后程序打印一个标识类型std::vector< int >::iterator的唯一字符串。如果{{1实现使用std

最后打印vector,因为这是iterator中的第一个值。