할당 연산자의 개념을 둘러 보거나 적어도 성공적으로 작성하는 데 문제가 있습니다.C++의 이중 링크 목록 할당 연산자
복사 생성자는 저에게 중요한 문제는 아닙니다.
//copy constructor
Set::Set(const Set &rhs){
_head = rhs._head;
_tail = rhs._tail;
//null, basically this object is 0
if(rhs._head == NULL){
_head = NULL;
_tail = NULL;
_size = 0;
}else{
_head = new Elem(*rhs._head);
_tail = new Elem(*rhs._tail);
_size = rhs._size;
Elem *prev = NULL;
Elem *curr = _head;
Elem *otherCurr = rhs._head;
int counter = 0;
while(otherCurr->next != NULL){
curr->next = new Elem(*otherCurr->next);
curr->next->prev = curr;
curr = curr->next;
otherCurr = otherCurr->next;
}
//now that we are done lets setup the tail
_tail->prev = curr;
curr->next = _tail;
}
}
내가 예제 코드를 읽고, 일부 사람들이 그것을 구현하는 #include <algorithm>
라이브러리를 사용 보았다 : 여기에 광산이 작업이 있다는 것입니다. 나는 대신 그것을 시도했지만, 전혀 작동하지 않는 것 같습니다.
//assignment operator
Set& Set::operator=(const Set &rhs){
Set temp(rhs);
std::swap(temp._head,_head);
std::swap(temp._tail, _tail);
return *this;
}
위의 코드는 제대로 작동하지 않습니다. 할당 연산자가 어떻게 만들어 졌는지에 대한 개념을 파악하는 데 정말 어려움을 겪고 있습니다. 나는 당신이 하나에서 다른 것으로 값을 복사하기를 원하는 것처럼 기본적으로 똑같이 작동 할 것이라고 생각했습니다. 그러나 분명히 아닙니다. 누군가가 저에게 일하는 방법에 대해 조언 할 수 있다면 그것은 좋을 것입니다.
내 수업에 대한 좀 더 일반적인 정보는 목록의 시작과 끝을 가리키는 a _head
과 a _tail
입니다. 더미 요소. 여기
개체가 어떻게 구성되어 있는지입니다 :
내가 당신의 복사 생성자 두 가지 문제를 참조struct Elem {
ELEMENT_TYPE info;
Elem *prev, *next;
};
Elem *_head, *_tail;
int _size;
아니요 [mcve]에 대해 투표를 종료하고 닫습니다. 주제 : 복사 생성자에서 잠재적 인 상처의 전체 세계 :'_head = rhs._head; _tail = rhs._tail;'주제 끄기 : 밑줄 접두어로주의하십시오. 일반적으로 내부 라이브러리 사용을 위해 예약되어 있습니다. 여기서 안전해야하지만 글로벌 범위에서 그렇게하거나 대문자로 밑줄을 따라 가면 문제가 발생할 수 있습니다. – user4581301
한숨, downvote 주셔서 감사합니다. 큰 도움 –
'std :: list' 대신에 수동으로 링크드리스트를 구현하고 있습니까? –