如何使用迭代器设计模式为 C++ 中的包装容器类提供多个迭代器?



我真的是C++菜鸟,所以如果我的问题表明缺乏基础知识,请不要介意。 我有一个类 User,用于描述我的系统中的用户。它包含简单的字段,如string namestring emailint age等。 我还有一个包装类组,它使用std::list来存储用户的集合。我想做的是使用 Iterator 设计模式,以便为 Group 类提供两个不同的迭代器。通过使用其中一个迭代器,我希望能够浏览按用户名排序的列表,并使用另一个迭代器,我想做同样的事情,只是它应该按用户的年龄排序。

我阅读了这篇关于迭代器设计模式的文章(https://www.robertlarsononline.com/2017/04/24/iterator-pattern-using-cplusplus/),但我不确定如何使显示的代码适应我的情况。我猜我的 Group 类需要有两种CreateIterator()方法(即:CreateAgeIterator()CreateNameIterator()),每种方法都返回迭代器类的不同特化。问题是我不知道我应该根据特定标准对列表进行排序的逻辑到底放在哪里。 这只是我正在做的一个基本项目,以研究一些语言以及迭代器设计模式本身。我不关心是否符合 STL 或任何东西,我只需要一个简单的概念实现。

我希望

能够浏览按用户名排序的列表,并使用另一个我想做同样的事情,只是它应该按用户的年龄排序。

为了按排序顺序迭代列表,必须根据该顺序对列表进行排序。但一个列表只能有一个顺序。

两种排序的一种解决方案是使用一个顺序对列表进行排序,并具有另一个数据结构,该结构包含指向列表元素的指针,但使用其他排序进行排序。

请注意,此其他容器的迭代器不会直接指向列表的元素,而是指向指针。因此,使用指针容器本身的迭代器与对包含元素的列表使用迭代器不同。

问题是我不知道我应该根据特定标准对列表进行排序的逻辑到底放在哪里。

每当插入或删除元素时强制排序。

请注意,列表的元素应该是 const,以便您不能通过修改对象的状态来中断排序。

最新更新