常用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可以重复) |