List 核心特性
- 雙向鏈表結構,支援雙向遍歷
- 插入/刪除 O(1)(已定位迭代器),不會使其他迭代器失效
- 不支援隨機存取,無
operator[]、at()
- 記憶體不連續,適合頻繁插刪、大型物件場景
建立 List 的多種方式
list l1; // 空 list
list l2(l1); // 複製建構
list l3(10); // 10 個預設構造元素
list l4(10, 0); // 10 個值為 0 的元素
核心操作完整示例
#include
#include
using namespace std;
void PrintList(const list& l) {
for (auto v : l) cout << v << " ";
cout << endl;
}
int main() {
list l1;
// 尾插 / 頭插
l1.push_back(2); l1.push_back(4); l1.push_back(6); l1.push_back(8);
l1.push_front(3); l1.push_front(5); l1.push_front(7);
PrintList(l1); // 7 5 3 2 4 6 8
// 尾刪 / 頭刪
l1.pop_back(); PrintList(l1);
l1.pop_front(); PrintList(l1);
// 刪除所有值為 2 的元素
l1.remove(2); PrintList(l1);
// 指定位置插入(需迭代器)
auto it = l1.begin(); advance(it, 2);
l1.insert(it, 99); PrintList(l1);
// 指定位置刪除
it = l1.begin(); advance(it, 2);
l1.erase(it); PrintList(l1);
// 存取首尾
cout << "頭:" << l1.front() << " 尾:" << l1.back() << endl;
// 排序與反轉
l1.sort(); PrintList(l1); // 升序
l1.reverse(); PrintList(l1); // 降序
// 交換、清空
list l2 = {1,2,3};
l1.swap(l2);
l1.clear();
return 0;
}
關鍵提醒
insert/erase 需透過迭代器定位,advance 或手動 ++ 移動迭代器。
sort() 為成員函式(非通用演算法),針對鏈表優化(歸併排序)。
remove(val) 刪除所有等於 val 的元素,而非單個。