繁体   English   中英

向量迭代器和模板函数

[英]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 ,则这可能是一个很长的字符串,其中提到了片段stdvectoriterator ,或者对于“指向整数的指针”可能只是pi

最后,它打印10因为那是v2的第一个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM