C++ STL
(standard template library 标准模板库/泛型库)
1 序列式容器 array vector deque list forward_list

2 关联式容器 map multimap set multiset
<key,value> 底层-红黑树 按键大小默认升排(调用 std::less< T>)
头文件 | 元素键是否唯一 | |
---|---|---|
map | < map > | √ |
multimap | × | |
set | < set > | 键值同 √ |
multiset | × |
3 无序关联式容器(哈希容器) unordered_map unordered_multimap unordered_set unordered_multiset
<key,value> 底层-哈希表 无序,存储位置取决于键 C++11引入 在关联式容器基础上改进
容器选择
涉及大量遍历操作 关联式容器
通过键获取对应值 无序容器
4 容器适配器 stack queue priority_queue
头文件 | 封装(基础)容器 | |
---|---|---|
stack 栈适配器 | < stack> | deque< T> |
queue 队列适配器 | < queue> | deque< T> |
priority_queue 优先权队列适配器(保证最大元素总在队首) | < queue> | vector< T> |
![]() | ||
![]() |
C++ & Java
数组 | C++ | Java |
---|---|---|
一维数组 | 1. vector v(N,0); //N个元素初始化为0 2. int a[N]={0}; 3. int *a = new a[N]; delete[] a; //使用a然后收回内存 | int[] a = new int[N]; //使用a,内存由垃圾回收机制回收;默认初始化为全0/Arrays.fill(a,0); |
二维数组 | vector<vector> v(M, vector(N,0)); //M行N列 每个初始化为0 | int[][] v=new int[M][N]; //默认初始化为全0 |
STL通用方法: 判空 empty() 元素个数 size() 清空 clear() 交换 swap(&other)
C++ | 数组 vector< int> v; | 栈 stack< int> s; | 单向队列 queue< int> q; | 双向队列 deque< int> dq; | map<string, int> m; | set< string> s; |
---|---|---|---|---|---|---|
增 | v.push_back(x); //尾 | s.push(x); //栈顶 | q.push(x); //队尾 | dq.push_front(x); //队头 dq.push_back(x); //队尾 | insert(key, val); | insert(val); |
删 | v.pop_back(); //尾 | s.pop(); //栈顶 | q.pop(); //队头 | dq.pop_front(x); //队头 dq.pop_back(x); //队尾 | erase() | erase() |
返回元素 | v.front(); //头 v.back(); //尾 | s.top(); //栈顶 | q.front(); //队头 q.back(); //队尾 | dq.front(); //队头 dq.back(); //队尾 | m.find(key); //返回迭代器 m[key] / m.at(key) //取值 | s.find(val); //返回迭代器 |
其它 | count(key) //max=1 | count(val) //max=1 |
Java | 数组 vector v; | 栈 Stack< T> s = new Stack<>(); Deque< T> s = new LinkedList<>(); | 单向队列 queue q; | 双向队列 deque dq; |
---|---|---|---|---|
增 | v.push_back(x); //尾 | s.push(x); //栈顶 | q.push(x); //队尾 | dq.push_front(x); //队头 dq.push_back(x); //队尾 |
删 | v.pop_back(); //尾 | s.pop(); //栈顶 | q.pop(); //队头 | dq.pop_front(x); //队头 dq.pop_back(x); //队尾 |
返回元素 | v.front(); //头 v.back(); //尾 | s.peek(); //栈顶 | q.front(); //队头 q.back(); //队尾 | dq.front(); //队头 dq.back(); //队尾 |
STL容器通用方法: 判空 empty()
元素个数 size()
清空队列 dq.clear()
定义链表
//C++
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//Java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}