저는 현재 "Programming : Principles and Practice using C++"의 17 장에 있습니다. 이중 연결리스트에있는 코드를 발견했습니다. 이전에이 코드 세트에 대한 질문 (예 : Member access in a doubly-linked list)을 요청했지만 질문을받지 않았거나 대답하지 않았습니다.포인터와 이중 연결리스트
코드는 기본적으로 "Freya"를 "Odin"의 전신으로 정렬하고 "Odin"을 "Thor"의 전신으로 만들고 다른 길은 후임으로 만듭니다. 코드는 다음과 같다 : 내가 알고 싶은 무엇
struct Link {
string value;
Link* prev;
Link* succ;
Link(const string& v, Link* p = nullptr, Link* s = nullptr)
: value(v), prev(p), succ(s) {}
};
int main()
{
Link* norse_gods = new Link{ "Thor", nullptr, nullptr };
norse_gods = new Link{ "Odin", nullptr, norse_gods };
norse_gods->succ->prev = norse_gods;
norse_gods = new Link{ "Freya", nullptr, norse_gods };
norse_gods->succ->prev = norse_gods;
}
는 그 코드 이유 :
norse_gods = new Link{ "Odin", nullptr, norse_gods }
이전 주소를 가리 할 수 있습니다 : new Link{ "Thor", nullptr, nullptr }
, 토르 오딘의 후계자 만들기 norse_god
은 이미 새 주소를 가리켜 야하기 때문에 : new Link{ "Odin", nullptr, norse_gods }
? 내가 누락 된 순서 또는 평가 또는 개념이 있습니까?
'norse_gods'를 생성자에 매개 변수로 전달한 다음'반환 값 '을 사용하여'norse_gods '에 할당합니다 (이전에 보유한 변수의 값을 대체). – UnholySheep
'x = x + 5'와 마찬가지로, 왼쪽의 'x'는 '새로운 값'이고, 오른쪽의 'x'는 '이전 값'입니다. – anatolyg
사이드 코드는 해당 코드의 형식이 잘못되었음을 나타냅니다. 목록에 Odin을 추가하면 새로운 링크 { "Odin", ..} 및 norse_gods-> succ-> prev = norse_gods; - Freya도 비슷하게. 따라서 공백 라인을 원할 경우, 그 중간에있는 것이 아니라 이러한 문장 그룹 앞에 공백을 두는 것이 논리적 일 것입니다. –