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

C++ STL 容器對比:vector vs set 核心區別

     編輯:C++ 入門

vector 與 set 核心區別詳解

基本分類

  • vector:序列式容器,底層動態數組,支援隨機訪問 O(1),尾部插入/刪除攤還 O(1),中間插入/刪除 O(n)(需移動元素)。
  • set:關聯式容器,底層紅黑樹,元素自動去重、自動排序(默認升序),查找/插入/刪除均 O(log n),不支援隨機訪問(無 operator[])。

代碼示例對比

// vector
vector<int> v;
v.insert(v.begin(), 1); // 必須指定位置
v.insert(v.begin(), 2);
v.insert(v.begin(), 1); // 允許重複
// 遍歷:for (auto it=v.begin(); it!=v.end(); ++it)

// set
set<int> s;
s.insert(1); // 可不指定位置
s.insert(2);
s.insert(1); // 自動去重,只保留一個 1
// 遍歷:for (auto it=s.begin(); it!=s.end(); ++it) -- 不能用 it < s.end()

運行結果:vector 輸出 3 1 2 1(保留插入順序、允許重複);set 輸出 1 2 3(有序、去重)。

迭代器與比較操作

  • vector 迭代器支援 < 比較(隨機訪問迭代器)。
  • set 迭代器為雙向迭代器,不支援 <,只能用 != 判斷結束。

Java 對應:ArrayList vs HashSet

  • ArrayList ≈ vector(新推薦),Vector 為舊類(同步、不推薦)。
  • HashSet 基於 HashMap,無序、去重;TreeSet 基於紅黑樹,有序、去重(≈ C++ set)。
  • List 允許重複、有序;Set 不允許重複。

選擇指南

需求推薦容器
高頻隨機訪問、尾部增刪vector / ArrayList
高頻中間增刪、順序遍歷list / LinkedList
雙端增刪deque / ArrayDeque
自動去重、需有序遍歷set / TreeSet
自動去重、無序、極快查找unordered_set / HashSet
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved