我有两节课
class PopulationMember
{
public:
void operationOnThisMember1();
void operationOnThisMember2();
...
private:
Population* populaltion_;
}
class Population
{
public:
void operationOnAllMembers1();
void operationOnAllMembers2();
...
void operationOnAllMembers100();
void sortAllMembersCriterium1();
void sortAllMembersCriterium2();
...
void sortAllMembersCriterium100();
private:
QVector<PopulationMember*> members_;
}
我想在我的框架中实现类似 SELECT 的功能。即只能对共享特定属性组合的成员执行操作。
到目前为止我想出了两种方法:
-
实现一个方法,该方法将返回一个由满足特定条件的成员组成的新 Population 对象。
Popuation Popuation::select(bool (predicate*) (PopulationMember*));
-
Add a
bool selected_;
给每个 PopulationMember 标记。
如果我这样做1.没有办法实现选中数据的排序和删除。如果我这样做 2. 检查选择性会产生开销,我将不得不重新实现排序和其他算法以仅对选定的成员进行操作。
还有第三种更好的方法吗?
我采取的方法是将迭代器接口公开给整个集合。为了实现某种选择,我将使用迭代器适配器,例如采用一元谓词,它提供了范围的新视图。这样,既不会影响存储的对象,也不会产生创建单独集合的任何开销。如果您查看 Boost 的迭代器适配器,您可能已经获得了所需的大部分内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)