通用迭代器访问向量
我想知道是否可以有一个通用迭代器来访问向量中的元素。我有不同的矢量,但只有一个功能来显示元素。 如果我可以有一个泛型迭代器比我的方法可以顺利解决。如果可能的话请咨询。通用迭代器访问向量
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];
// }
你必须通过iterator
和const_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());
你的代码给了我一堆错误。它说'VectorObject'没有被宣布为 –
@ 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;
}
你使用哪个版本的C++的? –
@DenisErmolin基本我认为..但我确定我不使用C++ 11 –
@DenisErmolin我是新来的C++,所以我不知道如何找到 –