class MyClass {
std::vector<int> vi;
std::vector<string> vs;
}
我想用一个迭代器来遍历所有集合在MyClass
,即通过所有的六迭代,然后通过所有与vs
和vi
唐没有1:1的关系(所以我不能使用基于元组的迭代方法)。这是我遇到的一个编程问题。遍历不同类型的集合类中的
Iterator设计模式对相同类型的集合起作用,从内部表示中抽象访问。它的接口是模拟这个问题的一个有用的东西,但是集合之间的类型差异是什么让我很难。
我喜欢从使用的角度来看待问题。
MyClass mc;
... // push elements into mc
for(MyClassIterator it = mc.begin();
it != mc.end();
it++)
{
// *it can be either an int or a string
// operator * for the iterator cannot return a common type! :(
}
我甚至不知道如何来思考设计MyClassIterator因为在集合中的不同类型(int,字符串中的例子)。
编辑:只是为了澄清,这是我遇到的编程问题。我无法想出任何明智/优雅的东西,因此我在这里问这个问题。
这是我遇到的一个问题,我找不出一个通用的解决方案。只是想与专家核对。 – Raja
在担心迭代器之前,请关注循环中的代码。实际上,对于可能是“int”或可能是“字符串”的东西,它会做什么?该问题的答案将有助于确定迭代器应返回的类型。 –
由于C++不支持检查,我认为唯一的解决方法是查询迭代器的类型。 类似于: if(it.typeInt()) int&i = * it; ... 它的丑陋地狱 - 这就是为什么我想知道是否有一个优雅的答案。 – Raja