✨컴공주✨ [1052682] · MS 2021 (수정됨) · 쪽지

2022-06-08 01:16:28
조회수 288

컴공 일기56

게시글 주소: https://orbi.kr/00057028567

이건 아직 해결이 도대체 되지 않은 문제입니다. double linked list는 잘 구현해놨는데, 왜 Iterator 부분에서 원하는 대로 데이터가 안 뽑히는지…… 내일 12시 시험인데 9시즘 일어나서 1시간 정도 더 고민해보려고요... 구현 잘 됐는데, 왜 도대체 왜 안 되는 거냐고!

왜! 왜! 왜! 컴파일러씨 억까 자제좀요 ㅠㅠㅠ 



#include <iostream>

#include <vector>

using namespace std;

 

class CShape{

    protected:

        int x,y;

        

    public:

        CShape(int a, int b) : x(a), y(b) {}

        virtual void Print() = 0;

 

};

 

template <typename T>

class CCircle : public CShape{

    private:

        T Radius;

        

    public:

        CCircle(int a, int b, T r) : CShape(a,b), Radius(r) {}

        double GetArea() { return 3.14 * Radius * Radius; }

        void Print() { cout << this->GetArea() << endl;}


        template <typename U>

        friend ostream& operator << (ostream& out, CCircle<U>& rhs);

};

 

template <typename U>

ostream& operator << (ostream& out, CCircle<U> rhs){

    cout << rhs.GetArea() << endl;

    return out; 

}

 

template <typename T>

struct Node{

    T data;

    Node<T> *next;

    Node<T> *prev;

    Node(T d, Node<T> *n = NULL ) : data(d), next(NULL), prev(NULL) { }

};

 

template <typename T>

class ListIterator{


    private:

        Node<T>* ptr;

        

    public:

         

        ListIterator(Node<T> *p=0) : ptr(p) {}

        void operator++ (int) { ptr = ptr->next;}

        void operator-- (int) { ptr = ptr->prev;}

        Node<T>* operator&(){

            return ptr;

        }

        T &operator* () { return ptr->data;}

        ListIterator<T> operator+ (int adv) 

        {

            while (adv > 0)

            {

                ptr = ptr-> next;

                adv--;

            }


            return *this;

        }

        void operator=(Node<T> *p) 

        {   

            ptr = p; 

            

        }

};

 

template <typename T>

class MyList {

    private :

        Node<T> *start;

        Node<T> *last;

        

    public:

        MyList() : start(NULL), last(NULL) {}

        typedef ListIterator<T> iterator;

        Node<T> *begin() {return start;}

        Node<T> *rbegin() {return last;}

      

        void push(T d) {

            Node<T> *temp = new Node<T> (d, NULL);

            if (start == NULL) {

                start = last = temp;

            }

            

            

            else

            {

                temp -> prev = last;

                last -> next = temp;

                last = temp;

            }

             

        }

    void insert(iterator iter, T d) {

        Node<T> *now = &iter;

        Node<T> *prevnode = now->prev;

        Node<T> *newnode = new Node<T>(d);

        prevnode->next = newnode;

        newnode->prev = prevnode;

        newnode->next = now;

        now->prev= newnode;

        if(now == start) start = newnode;

    }



    

   

    

};


int main()

{

    

    int i;

    MyList<CCircle<double> > intL;

    MyList<CCircle<double> >::iterator lIter;

    

    for(i=0; i<5; i++)

    {

        intL.push(CCircle<double>(1,1, i+ 1.1));

    }


    lIter = intL.begin();

    intL.insert(lIter+2, CCircle<double>(1,1,1.1));

    

    for(i=0; i<6; i++){

        cout << *lIter;

        lIter++;

    }


    lIter = intL.rbegin();

    for (i=0; i<6; i++){

        cout << *lIter;

        lIter--;

    }

 

    return 0;

 

}

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.