Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量迭代器和模板函数_C++_Templates_Vector_Iterator - Fatal编程技术网

C++ 向量迭代器和模板函数

C++ 向量迭代器和模板函数,c++,templates,vector,iterator,C++,Templates,Vector,Iterator,有人能给我解释一下为什么下面的代码可以工作并产生正确的结果吗v1.begin()生成迭代器,但在调试时,如果我在比较函数中检查v1.begin()的值,我会看到向量的第一个元素的值 这是否与需要使用typename vector::iteratorit来命名模板中的迭代器有关?如果有人能详细说明一下,那就太好了 谢谢 template<class U, class V> bool compare(const U &v1, const U &v2, const V &a

有人能给我解释一下为什么下面的代码可以工作并产生正确的结果吗
v1.begin()
生成迭代器,但在调试时,如果我在比较函数中检查
v1.begin()
的值,我会看到向量的第一个元素的值

这是否与需要使用
typename vector::iterator
it来命名模板中的迭代器有关?如果有人能详细说明一下,那就太好了

谢谢

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;
}
模板布尔比较(常数U&v1、常数U&v2、常数V&v3){
如果((v1==v2)和&(v2==v3)){
返回1;
}否则{
返回0;
}
}
#包括
#包括
使用名称空间std;
int main(){
向量v1(10,3);
向量v2(10,3);
bool iComp=compare(v1.begin(),v1.begin()+2,v2.begin());

cout
compare
返回
true
当且仅当所有三个迭代器都指向同一个对象。如果迭代器指向不同类型的对象,则可能存在编译错误

迭代器指向不同的对象,因为参数都不同,所以
compare
返回
false
。此结果被丢弃

然后程序打印一个唯一的字符串,标识类型
std::vector::iterator
。这可能是一个长字符串,表示片段
std
vector
、和
iterator
,也可能是“指向整数的指针”的
pi
如果
实现使用
typedef T*迭代器


最后它打印出
10
,因为这是
v2

iComp
中的第一个值,计算结果为
false
。所以我不理解这个问题!你是对的,我没有检查iComp的值,只是检查函数中v1、v2和v3的值。我不知道是出于什么原因,只是将鼠标悬停在v1、v2和v3上VC++ 2010表示函数的三个变量的值,所以我相信它会产生真的。它是伟大的,它不是逻辑告诉我的。抱歉没有仔细检查。Visual C++有助于显示迭代器所指向的。这就是你所看到的。<代码> V1 < /C> >代码> V2>代码> >代码> V3>代码>都是迭代器。@ OLI——当你对语言的逻辑不确定时,这可能是有用的;- -被质疑的问题:我通过在调试器下玩C++来了解到很多关于C++的知识。