M.A*_*M.A 5 c++ iterator stdvector
我想知道我是否可以使用通用迭代器来访问向量中的元素.我有不同的向量,但只有一个功能来显示元素.如果我可以有一个通用的迭代器,那么我的方法可以顺利运行.如果有可能请提供建议.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我以前做的更早,它的工作找到.我现在需要使用迭代器来实现
//for (int i = 0; i < v.size(); i++) {
// cout << v[i];
// }
Run Code Online (Sandbox Code Playgroud)
您可以vector通过iterator和访问迭代器类型const_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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我更改了签名以获取const引用而不是值.使用原始签名,每次调用函数时都会不必要地复制向量.
或者,您可以实现该函数以获取两个迭代器:
template <typename Iterator>
void Display(Iterator first, Iterator last) {
for (Iterator it = first; it!=last; ++it) {
cout << *it << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
Display(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
654 次 |
| 最近记录: |