簡體   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