STL容器1
- 1.1 vector
- 1.2 set
- 1.3 map
1.1 vector
vector的优点:
1.动态大小调整:vector可以根据需要动态地调整大小,自动分配和释放内存,确保在添加或删除元素时实现高效的内存管理
2.连续存储:vector的元素在内存中是连续存储的,这使得通过指针算术进行快速访问成为可能
3.高效随机访问:由于元素的连续存储,vector支持高效的随机访问,可以通过索引直接访问任何元素
4.尾部插入和删除的高效性:在尾部进行插入和删除操作的时间复杂度为O(1),这使得在需要频繁在序列末尾添加或移除元素时非常高效
5.灵活的构造方式:vector提供了多种构造方式,包括默认构造、通过指定大小和值进行构造、通过迭代器区间进行构造等
6.迭代器支持:vector提供了迭代器,可以通过迭代器遍历vector中的元素,支持查找、排序等算法操作
7.内存管理:vector负责动态分配和释放内存,自动管理存储元素的内存空间,确保不浪费内存
8.使用场景广泛:适用于需要动态增长和缩小的数据集合、频繁在序列末尾添加或移除元素、需要高效随机访问元素的场景
—全网
建立:
vector <int> v;
操作 | 语句 |
---|---|
输入 | push_back |
清空 | clear |
访问大小 | size |
e . g . 1 e.g.1 e.g.1
vector<int>v;
v.push_back(1);
cout << v[0] << endl;
cout << v.size() << endl;
o u t p u t : output: output:
1
1
e.g.2
vector<int>v;
int a;
cin >> a;
v.push_back(a);
cout << v[0] << endl;
cout << v.size() << endl;
v.clear();
cout << v.size() << endl;
i n p u t input input
88
o u t p u t output output
88
1
0
1.2 set
本质:功能受限的平衡树
头文件:
#include <set>
建立:
set <int> a;
操作 | 语句 |
---|---|
插入元素 | insert |
删除 | erase |
查找 | find |
查看大小 | size |
清空 | clear |
e . g . 1 e.g.1 e.g.1
set <int> a;a.insert(2);a.insert(4);cout << a.size() << endl;
o u t p u t output output
2
e . g . 2 e.g.2 e.g.2
set <int> a;a.insert(2);a.insert(4);a.erase(2);cout << a.size() << endl;
o u t p u t output output
1
e . g . 3 e.g.3 e.g.3
set <int> a;a.insert(2);a.insert(4);a.insert(6);cout << *a.begin() << endl;a.erase(2);cout << *a.begin() << endl;a.insert(3);cout << *a.begin() << endl;
o u t p u t output output
2
4
3
e . g . 4 e.g.4 e.g.4
set <int> a;a.insert(2);a.insert(4);a.insert(6);cout << *--a.end() << endl;
o u t p u t output output
6
e . g . 5 e.g.5 e.g.5
set <int> a;a.insert(2);a.insert(4);a.insert(6);cout << (a.find(4) != a.end()) << endl;a.erase(4);cout << (a.find(4) != a.end()) << endl;
o u t p u t output output
1
0
e . g . 5 e.g.5 e.g.5
set <int> a;a.insert(2);a.insert(4);a.insert(6);cout << *a.lower_bound(4) << endl;a.erase(4);cout << *a.lower_bound(4) << endl;
o u t p u t output output
4
6
e . g . 6 e.g.6 e.g.6
set <int> a;a.insert(2);a.insert(4);a.insert(6);for (set <int> :: iterator i = a.begin(); i != a.end(); i++){cout << *i << endl;}
o u t p u t output output
2
4
6
1.3 map
本质:功能受限的平衡树,可以当成一个支持奇怪的下标的数组
头文件:
#include <map>
建立:
map <key, valur> mp;
操作 | 语句 |
---|---|
加入一个映射 | s[a] = b |
访问 | s[a] |
清空 | clear |
e . g . 1 e.g.1 e.g.1
map <int, int> mp;mp[-1] = 100;cout << mp[-1] << endl;
o u t p u t output output
100
e . g . 2 e.g.2 e.g.2
map <int, int> mp;mp[-1] = 100;cout << mp[-1] << endl;mp[-1] += 500;cout << mp[-1] << endl;
o u t p u t output output
100
600
e . g . 3 e.g.3 e.g.3
map <string, int> mp;mp["笑谈c语言"] = 5;cout << mp["笑谈c语言"] << endl;mp["笑谈c语言"] = 233;cout << mp["笑谈c语言"] << endl;
o u t p u t output output
5
233
e . g . 4 e.g.4 e.g.4
map <int, int> mp;mp[1] = 0;mp[2] = 1;for (map <int, int> :: iterator i = mp.begin(); i != mp.end(); i++){cout << (*i).second << endl;}
o u t p u t output output
1
0