// ============================================================================
//  p1c09_03_05  —  3.6.3 list容器的数据结构
//  来源：川大 C++/LinuxC wiki「02.Qt方向」
//  说明：本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用
//        // --- 原文片段 [pageId:blockIdx] --- 标注出处。
//        已做最小修正（笔误/平台移植），详见 docs/ERRATA.md。
// ============================================================================

#include <iostream>
using namespace std;
#include <list>

// --- 原文片段 [58954488:4]  3.6.3 list容器的数据结构 ---
#include <iostream>
#include <list>
using namespace std;

// 【可移植性说明】原文直接访问 MSVC STL 的 list 私有成员
// （_Nodeptr / _Myhead / _Next / _Mysize / _Myval）来「演示 list 的环形
// 双向链表结构」。这些是 MSVC 实现细节，libstdc++（gcc）无等价物，无法移植。
// 下面改用标准迭代器接口遍历，并以注释图示说明 list 的环形双向链表结构：
//
//        _Myhead (哨兵节点) ──┐
//         ↑       ↓           │  list 内部维护一个哨兵头节点 _Myhead，
//   [_Prev|_Myval|_Next] ←──→ [_Prev|_Myval|_Next] ←──→ ... ──┘
//   末节点.next = _Myhead；_Myhead.prev = 末节点；_Mysize 记录元素个数。
//   遍历从 _Myhead->_Next 开始，绕一圈回到 _Myhead 即结束。

int main(){
	list<int> myList;
	for (int i = 0; i < 10; i++){
		myList.push_back(i);
	}

	// 标准（可移植）方式：用迭代器遍历环形双向链表
	cout << "size = " << myList.size() << endl;
	for (list<int>::iterator it = myList.begin(); it != myList.end(); it++){
		cout << "Node:" << *it << endl;
	}

	return EXIT_SUCCESS;
}

// --- main ---
