循环访问类中的不同集合类型

Iterate over different collection types in a class

本文关键字:集合 集合类 类型 访问 循环      更新时间:2023-10-16
class MyClass {
    std::vector<int> vi;
    std::vector<string> vs; 
}

我想使用单个迭代器遍历MyClass中的所有集合,即遍历所有 vi,然后遍历所有 vs。 vsvi 没有 1:1 的关系(所以我不能使用基于元组的迭代方法)。这是我遇到的一个编程问题。

迭代器设计模式适用于相同类型的集合,从内部表示中抽象出访问。它的界面对于这个问题来说是一个有用的东西,但是集合之间的类型差异让我很难过。

我喜欢从使用的角度来看待这个问题。

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,字符串)。

编辑:澄清一下,这是我遇到的一个编程问题。我想不出任何明智/优雅的东西,因此我在SO上问它。

您可以将迭代器的值类型设置为类似 Boost 变体的变体。