我的自定义迭代器有什么问题

What is wrong with my custom iterator

本文关键字:什么 问题 迭代器 自定义 我的      更新时间:2023-10-16

所以,我一直在试图弄清楚自定义迭代器是如何工作的,在投入了这么多时间但仍然不足之后,我决定问整个社区:我做错了什么?请帮忙,解释会很好,但如果是"次要",则没有必要。

作为一个附带问题,有谁知道让"显示为集合关联"在 MSVS 中的类图中工作的要求是什么? 它只是不适用于C ++吗?就其而言,甚至我的 bar2 也不是整数的集合。

这是我的代码,它应该编译,但显然我的迭代器坏了......

编辑:既然人们在问,问题是我实现的迭代器没有迭代酒吧

#include <vector>
#include <iostream>
using namespace std;
template<class T> 
class Foo
{
public:
    template<class T>
    class FooIterator : std::iterator<std::forward_iterator_tag, T, ptrdiff_t, T*, T&>
    {
    public:
        Foo<T>* arrayPtr;
        int index, size;
        FooIterator(Foo<T>* arrayPtr, int size, int index) : arrayPtr(arrayPtr), size(size), index(index) {}
        T& operator*() {return *(arrayPtr->operator[](index));}
        T* operator->() {return &(operator*());}
        FooIterator &operator++(){++index; return *this;}
        FooIterator operator++(int){FooIterator tmp(*this); ++(*this); return tmp;}
        bool operator!=(const FooIterator &other) const {return other.index == index;}
    };
    T** ts;
    int size;
    int index;
    typedef FooIterator<T> fooiterator;
    fooiterator begin(){return fooiterator(this, size, 0);}
    fooiterator end(){return fooiterator(this, size, size);}
    ~Foo();
    void init(int size);
    void insert(T* item);
    T* operator[](int index);
    typedef T          value_type;
    typedef T*         pointer;
    typedef const T*   const_pointer;
    typedef T&         reference;
    typedef const T&   const_reference;
    typedef int        size_type;
    typedef ptrdiff_t  difference_type;
};
template<class T>
void Foo<T>::init(int size)
{
    ts = new T*[size];
    index = 0;
}
template<class T>
Foo<T>::~Foo()
{
    for(int i = 0; i < index; i++)
        delete ts[i];
    delete ts;
}
template<class T>
void Foo<T>::insert(T* item)
{
    ts[index++] = item;
}
template<class T>
T* Foo<T>::operator[](int index)
{
    return ts[index];
}
struct Bar
{
public:
    Foo<int> nums;
    Bar()
    {
        nums.init(3);
        int val = 1;
        nums.insert(new int(1));
        nums.insert(new int(2));
        nums.insert(new int(3));
        for each (int var in nums)
        {
            cout << var << endl;
        }
    }
};
struct Bar2
{
    vector<int> nums;
    Bar2()
    {
        nums.push_back(4);
        nums.push_back(5);
        nums.push_back(6);
        for each (int var in nums)
        {
            cout << var << endl;
        }
    }
};
int main ()
{
    Bar bar;
    /*for (int i = 0; i < bar.nums.index; i++)
    {
        cout << *bar.nums[i] << endl;
    }*/
    Bar2 bar2;
    cin.get();
    return 0;
}

一个明显的问题是,operator!=实际上是在测试平等性。