我有一个类 memberlist,它包含类 memberinfo 的 std::list
。这些代表网络上的对等点。
我使用该类向列表中添加一些功能。
我想公开一些迭代器(开始和结束),以便外部代码可以循环遍历我的内部列表并读取它们的数据。但是,我希望有两种方法来执行此操作 - 一种包含本地主机的元素,另一种不包含。
执行此操作的好方法是什么?
我可以把本地节点放在第一位,然后像 begin(showlocal=false)
一样只给出第二个元素而不是第一个。或者有人建议存储一对带有 bool 值的值,说明它是否是本地的。
关于执行此操作的好方法有什么建议吗?我还不太擅长高级 STL
东西。
最佳答案
就我个人而言,我会以不同的方式处理这个问题,让您的 memberinfo
有办法告诉您它是否是本地的。
这样一来,您就不会因为包含对象的专门化而专门化您的集合类。事实上,您可以只使用标准 std::list<memberinfo>
.
例如
class memberinfo
{
bool IsLocal( ) const;
}
然后您将在遍历包含的对象时选择是否对本地成员感兴趣。
例如
std::list<memberinfo>::iterator it;
std::list<memberinfo> list;
for ( it = list.begin() ; it != list.end() ; it++ )
{
if ( it->IsLocal() )
{
// blah blah blah
}
else
{
// dum dee dum dee
}
}
关于c++ - 为包装列表自定义迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426767/