데이터를 메모리의 동일한 섹션에 저장하려면 사용하는 std::vector<TreeElement *>
에 대한 Allocator 개체를 제공하고 블록에서 할당해야합니다.
실제 포인터를 저장하는 대신 직렬화 할 수 있으려면 블록에 오프셋을 저장하는 것이 좋습니다. 그런 다음 데이터를 다시 읽을 때 각 오프셋에 블록 시작 주소를 추가하여 주소로 되돌릴 수 있습니다.
사용중인 OS/컴파일러에 따라 일부 지원이 이미있을 수 있습니다. 예를 들어, Microsoft의 컴파일러는 __based
포인터를 지원합니다. 그 포인터는 기본 주소와 해당 주소를 기반으로하는 각 포인터가 실제로 오프셋이며 전체 포인터가 아니라 설명했습니다. mmap
에 대한 언급은 아마 당신에게 직접 사용 가능하지 않다는 것을 나타내지 만, 가능함 당신이 사용하고있는 컴파일러/OS가 비슷한 것을 가지고 있습니다. 그렇지 않으면 직접 작업해야합니다 (예 : based_pointer
클래스).
정말 중요한 이유는 이동 트리를 직렬화하려고하는 이유입니다. 일반적인 경우에는 현재 보드 위치를 저장하는 것 (또는 이동 히스토리)을 저장하는 것이 좋습니다. 필요할 경우 언제든지 이동 트리를 다시 생성하는 것이 좋습니다. 그만큼 작아서 저장하기가 쉽습니다.
포인터를 포함하고'벡터 '를 사용하기 때문에 어떻게 든 직렬화하지 않고 파일에 구조체를 저장할 수 없습니다. –
이것들은 3 가지로 매우 광범위하고 매우 다른 질문들이 하나로 통합되어 있습니다. 제발 그만 하지마. –
노드 이름을 지정하고 (단지 포인터 값 사용) 깊이 우선 orderearch에서 트리를 가로 지르려고 다음과 같이 순서가 지정된 1 차원 배열을 생성 할 수 있습니다. [{node : 1, move : .., parent : 0}, {노드 : 2, 이동 : .., 부모 : 1}, {노드 : 3, 이동 : .., 부모 : 2}, {노드 : 4, 이동 : .., 부모 : 3} – arthurprs