【问题标题】:Attempt at STL Container尝试 STL 容器
【发布时间】:2019-05-04 07:42:57
【问题描述】:

我正在尝试使用链表制作 std::set 的版本。我想我已经正确地实现了它,但是我得到了一个我无法破译的编译错误。如果有人发现我的代码中的错误,或者解释我将如何追踪这样的错误,我将不胜感激。意味着在 stl 函数中出现的错误。

#include <iterator>
#include <cstddef>
template <typename Type>
struct ListNode{
        Type info;
        ListNode<Type> * next;
        ListNode(Type newInfo, ListNode<Type> * newNext) : info(newInfo), next(newNext){
            }
        ListNode(ListNode<Type>& L): info(L.info), next(L.next){
        }
        ListNode<Type>& operator=(ListNode<Type>& L){
            info = L->info;
            next = L->next;
            return this;
        }
        };
template <typename Type>
class SetList{
    ListNode<Type> * head;
    ListNode<Type> * tail;
       public:
        typedef ListNode<Type> value_type;
        SetList() : head(nullptr), tail(nullptr){
        }
        SetList(SetList & s){

        }
        ~SetList(){
            //ListNode<Type> * cur = head;
            //ListNode<Type> * next = cur;
            //while(cur){
        //      next = cur->next;
        //      delete cur;
        //      cur = next;
          //  }
        }


        struct iterator{
            //traits
            typedef std::forward_iterator_tag iterator_category;
            typedef iterator self_type;
            typedef Type value_type;
            typedef Type& reference;
            typedef Type* pointer;
            typedef ptrdiff_t difference_type;
            private:
                //rename to ihead
                ListNode<Type>* ibuf;
            public:
                iterator(ListNode<value_type>* node) : ibuf(node){}
                self_type& operator++(){ibuf = ibuf->next; return *this;}
                self_type operator++(int postfix){
                   self_type cpy = *this;
                   ibuf = ibuf->next;
                   return cpy;
                }
                reference operator*(){return ibuf->info;}
                pointer operator->(){return &ibuf->info;}
                self_type operator=(const iterator& it){insert(*it);}
  bool operator==(const self_type& rhs) const {return ibuf->info == rhs.ibuf->info;}
                bool operator !=(const self_type& rhs) const {return ibuf->info != rhs.ibuf->info;}
        };

        iterator begin(){ return iterator(head);}
        iterator end() { return iterator(nullptr);}
//      const_iterator begin() { return const_iterator(head);}
//      const_iterator end() { return const_iterator(tail);}
        Type operator[](int index){
            iterator cur(head);
            for(int i = 0; i < index; ++i,++cur){
            }
            return *cur;
        }
        SetList<Type>& operator=(const SetList<Type>& s){
            head = s.head;
            tail = s.tail;
            return this;
        }
        iterator find(Type toFind){
            ListNode<Type> * cur = head;
            while(cur){
                if(cur->info == toFind)
                    return iterator(cur);
            }
            return this->end();
        }
        void insert(Type toInsert){
            ListNode<Type>* cur = nullptr;
            if(head){
                cur = new ListNode<Type>(toInsert, head);
                head = cur;
            }else{
                cur = new ListNode<Type>(toInsert, nullptr);
                head = cur;
            }

        }
};

我在我的集​​合上调用其他地方的副本,我的副本调用适用于 std::set 但不适用于我的集合。 我得到的错误如下。

希望这不是太多要求。您甚至不必阅读我的代码,即使只是输入有关如何追踪此类大错误的信息,将不胜感激。

【问题讨论】:

    标签: stl iterator containers c++17


    【解决方案1】:

    SetList&lt;Type&gt; 应该有Type 作为它的value_type,而不是ListNode&lt;Type&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 2021-07-30
      • 2011-02-07
      • 2010-09-11
      • 1970-01-01
      • 2014-09-09
      相关资源
      最近更新 更多