c++ - 为包装列表自定义迭代器

标签 c++ list class stl

我有一个类 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/

相关文章:

c++ - OpenCV Mat 数据成员访问

c++ - 如何在 C++ 中将矩阵市场文件转换为矩阵

python - 通过维护列表中值的映射顺序来随机化两个列表

javascript - Javascript 中是否需要类?它们对创建对象有什么影响?

java - 创建类存储对象

c++ - 在 QDir::entryInfoList 中使用多个条件进行排序

c++ - 从节点向其邻居发送消息

c# - 序列化。如何将多个列表序列化到一个文件中?

python - 在 Python 中取消列出以使用 itertools.product

PHP 类扩展文件夹外的另一个类