首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ STL 容器精講:list 雙向鏈表完整操作指南

     編輯:關於C++

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 的元素,而非單個。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved