C++的STL简介

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值