gpt4 book ai didi

c++ - vector 迭代器和模板函数

转载 作者:行者123 更新时间:2023-11-28 08:21:48 26 4
gpt4 key购买 nike

有人可以向我解释为什么下面的代码有效并产生 true 吗? v1.begin()生成一个迭代器但是在调试时如果我检查 v1.begin() 的值在比较函数中,我看到了 vector 第一个元素的值。

这与需要使用 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 .这可能是一个提到片段 std 的长字符串, vector , 和 iterator ,或者可能只是 pi对于“指向整数的指针”,如果 <vector>实现使用 typedef T *iterator .

最后它打印出 10因为这是 v2 中的第一个值.

关于c++ - vector 迭代器和模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5559854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com