gpt4 book ai didi

c++ - 通用/多态迭代器

转载 作者:太空狗 更新时间:2023-10-29 20:39:33 26 4
gpt4 key购买 nike

实现 getIterator 的最佳方法是什么?根据条件,我想返回相应的迭代器。

// global variables
vector<int> myVector;
set<int> mySet;

vector<int>/set<int>::iterator getIterator(bool someCondition) {
if (someCondition) return mySet.begin();
else return myVector.begin();
}

请抵制“不使用全局变量”等“明智”的回应。我只是想知道是否有一种方法可以“概括”集合和 vector 迭代器,这个例子只是为了让事情简单化。

干杯

最佳答案

是的,迭代器可以泛化,但您可能需要编写一个包装类。有几种实现它的选项。显然,您需要在类中存储一个实际的迭代器,并有办法确定它是哪个迭代器。例如:

class MyIter {
...
private:
union {
std::vector<int>::iterator vec_iter;
std::set<int>::iterator set_iter;
}
bool is_vec_iter; /* or like in an example above, enum { vector, set} type_t; */
};

很明显,如何构造此类的对象。有趣的部分是实现接口(interface),即解引用、递增、比较迭代器。

可能值得一看的好东西是 boost::iterator_facade: http://www.boost.org/doc/libs/1_53_0/libs/iterator/doc/iterator_facade.html .它是一个帮助程序模板,它仅使用您必须提供的几种取消引用和遍历方法来实现迭代器的大部分操作。即使您决定从头开始实现所有内容,iterator_facade 也是一个很好的开始示例。

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

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