5

我想知道是否可以使用通用迭代器来访问向量中的元素。我有不同的向量,但只有一个函数来显示元素。如果我可以拥有一个通用迭代器,那么我的方法就可以顺利进行。可以的话请指教。

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;
    }
}

这是我以前做过的事情,它可以找到。我现在需要使用迭代器来实现

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

2 回答 2

5

您可以通过and访问 avector的迭代器类型,因此无需切换:iteratorconst_iterator

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());
于 2012-11-16T09:31:31.023 回答
3
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;
}
于 2012-11-16T09:31:57.247 回答