通用迭代器访问向量

问题描述:

我想知道是否可以有一个通用迭代器来访问向量中的元素。我有不同的矢量,但只有一个功能来显示元素。 如果我可以有一个泛型迭代器比我的方法可以顺利解决。如果可能的话请咨询。通用迭代器访问向量

Point2,Point3,Line2,Line3是4个不同的类。该方法接受了我用另一种方法创建的矢量对象。

template <typename VecObject> 
void Display(VecObject v) { 

    if (filterCriteria == "Point2") { 
     vector<Point2>::iterator it; 
    } else if (filterCriteria == "Point3") { 

    } else if (filterCriteria == "Line2") { 

    } else if (filterCriteria == "Line3") { 

    } 

    for (it = v.begin(); it!=v.end(); ++it) { 
     cout << *it << endl; 
    } 
} 

这是我用来做ealier和它的工作发现。我现在需要使用迭代器

//for (int i = 0; i < v.size(); i++) { 
// cout << v[i]; 
// } 
+0

你使用哪个版本的C++的? –

+0

@DenisErmolin基本我认为..但我确定我不使用C++ 11 –

+0

@DenisErmolin我是新来的C++,所以我不知道如何找到 –

你必须通过iteratorconst_iterator访问vector的迭代器类型,所以你不需要切换来实现:

template <typename VecObject> 
void Display(const VecObject& v) { 
    typename VecObject::const_iterator it; 
    for (it = v.begin(); it!=v.end(); ++it) { 
     cout << *it << endl; 
    } 
} 

注意,我改变了签名采取一个const引用而不是一个值。使用原始签名时,每次调用函数时都会不必要地复制向量。

或者,你可以实现的功能需要两个迭代器:

template <typename Iterator> 
void Display(Iterator first, Iterator last) { 
    for (Iterator it = first; it!=last; ++it) { 
     cout << *it << endl; 
    } 
} 

,并调用它像这样:

Display(v.begin(), v.end()); 
+0

你的代码给了我一堆错误。它说'VectorObject'没有被宣布为 –

+1

@ user1571494对不起,我有一个错字'VectorObject'而不是'VecObject'。我现在修好了。 – juanchopanza

template<typename VectorObject> 
void Display(VecObject v) { 
    typename VectorObject::const_iterator it = v.begin(); 
    for (; it!=v.end(); ++it) { 
     cout << *it << endl; 
    } 
} 

假设你VectorObject实现,你可以访问它的迭代器iterator直接输入。

用法:

int main() 
{ 
    std::vector<int> intv(2, 5); 
    std::vector<float> fv(2, 10); 
    Display(intv); 
    Display(fv); 
    return 0; 
}