首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集合接口的自定义迭代器

集合接口的自定义迭代器
EN

Stack Overflow用户
提问于 2015-05-28 21:18:37
回答 1查看 55关注 0票数 0

我有一个接口ICollection实现了这样的集合ArdalanCollection:

代码语言:javascript
复制
template <typename T>
class ICollection
{
public:
    virtual void add(T*) = 0;
    virtual T* get(int) = 0;
    virtual int count() = 0;
};

template <typename T>
class ArdalanCollection :public ICollection<T>
{
public:
    ArdalanCollection() {
        index = 0;
    };
    virtual void add(T* obj) {
        encapsolateImplementation.insert(make_pair(index++, obj));
    };
    virtual T* get(int index) {
        return encapsolateImplementation[index];
    };
    virtual int count() {
        return encapsolateImplementation.size();
    };
private:
    int index;
    unordered_map < int, T* > encapsolateImplementation;
};

我想要的是在ICollection接口中有一个通用迭代器,它可以循环所有内部容器元素(我还没有决定选择unordered_map作为我的内部容器,我可能会将它更改为boost或其他东西)。我想用这样的方式:

代码语言:javascript
复制
    Node *node1 = new Node(1, 0, 0, 0);
    Node *node2 = new Node(1, 0, 0, 0);
    ICollection<Node> *nodes = new ArdalanCollection<Node>();
    nodes->add(node1);
    nodes->add(node2);
    for (it=nodes->iterator.begin(); it < nodes->iterator.end(); it++) {

    }
EN

回答 1

Stack Overflow用户

发布于 2015-07-10 16:16:59

首先,您的for循环成语是不正确的。它应该看起来像

代码语言:javascript
复制
for(auto it = nodes->begin(); it != nodes->end(); it++)

然后是这样的:

代码语言:javascript
复制
template <typename T, typename MyMap>
class ICollection
{
public:
    typedef typename MyMap<int, T *>::iterator iterator;
    virtual void add(T*) = 0;
    virtual T* get(int) = 0;
    virtual int count() = 0;
};

应该没事的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30517260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档