C++ & Java

本文介绍了C++的STL(StandardTemplateLibrary)核心组件,包括序列式容器如array,vector,deque,list和forward_list,关联式容器如map,set及无序关联式容器unordered_map等。此外,还提到了容器适配器stack,queue和priority_queue,以及C++和Java中数组的初始化和操作。STL提供了丰富的操作方法,如插入、删除、查找等,便于高效编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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列 每个初始化为0int[][] 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=1count(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; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kukukukiki192

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值