gpt4 book ai didi

c++ - 访问 vector 的通用迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:08 25 4
gpt4 key购买 nike

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

Point2,Point3,Line2,Line3 是 4 个不同的类。该方法接受我在另一个方法中创建的 vector 对象。

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

最佳答案

您可以通过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 引用而不是值。使用原始签名,您将在每次调用函数时都不必要地复制 vector 。

或者,您可以实现采用两个迭代器的函数:

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

并这样调用它:

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

关于c++ - 访问 vector 的通用迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13413688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com