// ============================================================================ // p1c09_03_05 — 3.6.3 list容器的数据结构 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; #include // --- 原文片段 [58954488:4] 3.6.3 list容器的数据结构 --- #include #include 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 myList; for (int i = 0; i < 10; i++){ myList.push_back(i); } // 标准(可移植)方式:用迭代器遍历环形双向链表 cout << "size = " << myList.size() << endl; for (list::iterator it = myList.begin(); it != myList.end(); it++){ cout << "Node:" << *it << endl; } return EXIT_SUCCESS; } // --- main ---