常用STL容器特性
容器 | 操作 | 底层实现 | 特点 | 是否自动排序 | 能否使用迭代器 | 元素能否重复 |
---|---|---|---|---|---|---|
Vector | 构造: vector<T> v; 插入: v.push_back(val); , v.insert(pos, val); 删除: v.pop_back(); , v.erase(pos); 访问头尾: v.front() , v.back() 其他: v.size() , v.empty() , v.clear() |
动态数组 | 动态数组,支持快速随机访问,尾部插入/删除高效,中间插入/删除较慢。 | 否 | 是 | 是 |
String | 构造: string s; 插入: s.push_back(c); , s.insert(pos, str); 删除: s.pop_back(); , s.erase(pos, len); 访问头尾: s.front() , s.back() 其他: s.size() , s.empty() , s.clear() , s.substr(pos, len) |
动态数组 | 专门用于存储字符序列,支持字符串操作(如子串、查找、替换等)。 | 否 | 是 | 是 |
Deque | 构造: deque<T> dq; 插入: dq.push_back(val); , dq.push_front(val); 删除: dq.pop_back(); , dq.pop_front(); 访问头尾: dq.front() , dq.back() 其他: dq.size() , dq.empty() , dq.clear() |
分段连续空间(双端队列) | 双端队列,支持头部和尾部高效插入/删除,随机访问性能略低于 vector 。 |
否 | 是 | 是 |
Queue | 构造: queue<T> q; 插入: q.push(val); 删除: q.pop(); 访问头尾: q.front() , q.back() 其他: q.size() , q.empty() |
基于 deque 或 list |
先进先出(FIFO)容器,只允许在尾部插入,头部删除。 | 否 | 否 | 是 |
Stack | 构造: stack<T> st; 插入: st.push(val); 删除: st.pop(); 访问头尾: st.top() 其他: st.size() , st.empty() |
基于 deque 或 vector |
后进先出(LIFO)容器,只允许在顶部插入/删除。 | 否 | 否 | 是 |
List | 构造: list<T> lst; 插入: lst.push_back(val); , lst.push_front(val); 删除: lst.pop_back(); , lst.pop_front(); 访问头尾: lst.front() , lst.back() 其他: lst.size() , lst.empty() , lst.clear() , lst.remove(val) |
双向链表 | 双向链表,支持高效插入/删除,不支持随机访问,内存占用较高。 | 否 | 是 | 是 |
Set | 构造: set<T> s; 插入: s.insert(val); 删除: s.erase(val); 访问头尾: *s.begin() , *s.rbegin() 其他: s.size() , s.empty() , s.clear() , s.find(val) |
红黑树 | 基于红黑树实现,元素唯一且自动排序,查找效率高。 | 是 | 是 | 否(multiset 可以重复) |
Map | 构造: map<K, V> m; 插入: m.insert({key, val}); 删除: m.erase(key); 访问头尾: m.begin()->second , m.rbegin()->second 其他: m.size() , m.empty() , m.clear() , m.find(key) |
红黑树 | 基于红黑树实现,键值对存储,键唯一且自动排序,查找效率高。 | 是 | 是 | 否(multimap 可以重复) |