0.STL简介
C++的STL(Standard Template Library,标准模板库)是C++标准库的一部分,它提供了一套通用的类和函数模板,用于处理数据结构和算法。STL的主要组件包括:
- 容器
- 分配器
- 算法
- 迭代器
- 适配器
- 仿函数
容器
容器是用于存储和管理数据元素的类模板。STL中的容器可以分为序列容器和关联容器
容器适配器
容器适配器是对其他容器进行封装,提供特定的接口,适配特定的使用场景。
1.vector
vector访问之前一定要预先定义大小!!!!!
vector(矢量)是一种变长数组,即自动改变数组长度的数组
vector可以用来以邻接表的方式存储图
1.1如何使用vector
1.1.1vector的定义
vector<类型名>变量名;
类型名:int ,double, char, struct, STL容器(vector,set,queue)
例:
vector<int> name;
vector<vector<int> >; // > >之间要加空格
vector数组就是一个一维数组,如果定义成vector数组的数组,就是二维数组
(低维是高维的地址)
二维数组中,一维形式就是地址。
# include<vector>
# include<iostream>
using namespace std;
int main()
{
int arr[3][2];
cout<<arr[0]<<endl; //输出arr第一行的地址
cout<<arr[1]<<endl;
cout<<arr[2]<<endl;
return 0;
}
1.1.2vector容器内元素的访问
- 通过下标访问
# include<iostream>
# include<vector>
using namespace std;
int main()
{
vector<int> vi;
vi.push_back(1);
cout<<vi[0]<<endl;
return 0;
}
- 通过迭代器访问
迭代器可以理解为指针
# include<iostream>
# include<vector>
using namespace std;
int main()
{
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
//v.begin()返回v的首元素地址
vector<int>::iterator it = v.begin();
for (int i = 0; i < v.size(); i++)
{
cout<<it[i]<<" ";
}
return 0;
}
其中it[i]可以写成*(it +i)
类似于字符串遍历的for循环写法
for (vector<int>::iterator it = v.begin(); it!=v.end(); it++)
{
cout<<*it<<" ";
}
1.2vetcor常用函数
1.3vector常见用途
(1) 存储数据
Vector本身可以作为数组的使用,而且在一些元素个数不确定的场合可以节省空间
(2) 用邻接表存储图
用vector实现邻接表,更为简单
2.string
string是一个字符串类型,和char型字符串类似
- 头文件
#include<string>
- 初始化
string str1; //生成空字符串
string str2(“12345”,0,3)//结果为“123”,从0位置开始,长度为3
string str3(“12345678”)//生成12345678的复制品
string str4(“123456”,5)结果为12345,长度为5
2.1如何使用string
- 访问单个字符
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string s = "ni hao";
for (int i = 0; i < s.size(); i++)
{
cout << s[i] << " ";
}
return 0;
}
- string数组使用
# include<iostream>
# include<string>
using namespace std;
int main(void)
{
string s[10];
for (int i = 0; i < 10; i++)
{
s[i] = "loading...";
cout << s[i] << i << "\n";
}
}
2.2方法函数
2.2.1 获取字符串长度
2.2.2 插入
2.2.3 删除
2.2.4 字符替换
2.2.5 大小写转换
2.2.6 分割
2.2.7 查找
2.2.8 排序
2.3C语言与C++的string区别
3.set
set是一个内部自动有序且不含重复元素的容器
set可以在需要去除重复元素的情况下节省时间,减少思维量
默认升序输出
3.1如何使用set
使用set需加头文件
#include <set>
using namespace std;
set的定义
set<类型名>变量名;
类型名可以是int, double, char, struct, 也可以是STL容器:vector,set,queue
例:
set<struct node> name;
set<set<int> > name; //> >之间有空格
set数组的定义和vector相同:
set<类型名> array[size];
set容器内元素的访问
- set只能通过迭代器访问
set<int> ::iterator it;
set<char>::iterator it;
得到了迭代器it,并可以通过*it来访问set里的元素
注意:除了vector和string之外的STL容器都不支持(it+i)的访问方式,因此只能按照如下方式枚举*
# include<iostream>
# include<set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(5);
st.insert(2);
st.insert(6);
for (set<int>::iterator it = st.begin(); it != st.end(); it++)
{
cout<<*it<<" ";
}
return 0;
}
输出:2,5,6
3.2set的常用函数
3.2.1 insert()
#include <iostream>
#include <set>
using namespace std;
int main(void)
{
set<char> st;
st.insert('A');
st.insert('B');
st.insert('C');
for (set<char>::iterator it = st.begin(); it != st.end(); it++)
{
cout<<*it<<endl;
}
return 0;
}
3.2.2 find()
find(value)返回的是set中value所对应的迭代器,即value的指针(地址)
#include <iostream>