STL-vector容器和string容器

news2024/11/18 20:46:09

目录

一、STL的基本概念

二、vector容器

1.遍历

2.vector存放自定义数据类型

3.容器嵌套容器

4.构造函数

5.容量和大小

6.插入和删除

7.容器互换

三、string容器

1.string和char的区别

2.string的构造函数

3.赋值操作

4.字符串拼接

5.查找和替换

6.比较

7.字符串的存取和单个字符的修改

8.插入和删除

9.子串的获取


一、STL的基本概念

  • STL(Standard Template Library,标准模板库),STL从广义上分为:容器(container),算法(algorithm),迭代器(iterator)。
  • 迭代器是一个类对象,该类封装一个指针(迭代器可以理解为指针,对指针的操作基本都可以对迭代器操作),每个容器都有自己专属的迭代器

二、vector容器

  • vector数据结构和数组非常相似,也称为单端数组
  • vector与普通数组的区别数组是静态空间vector是可以动态扩展的,所谓的动态扩展是找更大的内存空间,然后将原有的数据拷贝给新的空间,释放原有的空间

1.遍历

#include<iostream>
#include<vector>
#include<algorithm>//标准算法的头文件
using namespace std;
void print(int x)
{
    cout << x << " ";
}
void text()
{
    vector<int> v;//创建一个vector容器
    v.push_back(1);//push_back()是插入函数
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);

    //通过迭代器访问容器中的数据
    vector<int>::iterator itBegin = v.begin();//起始迭代器,指向容器中的第一个元素
    vector<int>::iterator itEnd = v.end();//结束迭代器,指向容器中最后一个元素的下一个位置

    //第一种遍历方式
    while (itBegin != itEnd)
    {
        cout << *itBegin<< " ";
        itBegin++;
    }
    cout << endl;
    //第二种遍历方式
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    //第三种方式利用STL提供的for_each()
    for_each(v.begin(), v.end(), print);
}
int main()
{
    text();
    return 0;
}

2.vector存放自定义数据类型

  • vector存放自定义数据类型
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Student
{
public:
    string name;//姓名
    int age;//年龄
    Student(string n, int a)//构造函数,给name,age赋值
    {
        this->name = n;
        this->age = a;
    }
    ~Student()//析构函数
    {
        ;
    }
};
int main()
{
    Student stu1("张三", 15);
    Student stu2("李四", 17);
    Student stu3("王五", 19);

    vector<Student>v;
    v.push_back(stu1);//向容器中插入数据
    v.push_back(stu2);
    v.push_back(stu3);

    //遍历容器中的数据
    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "姓名:" << it->name << "  年龄:" << it->age << endl;
    }
    return 0;
}
  • vector存放自定义数据类型的指针
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Student
{
public:
    string name;//姓名
    int age;//年龄
    Student(string n, int a)//构造函数,给name,age赋值
    {
        this->name = n;
        this->age = a;
    }
    ~Student()//析构函数
    {
        ;
    }
};
int main()
{
    Student stu1("张三", 15);
    Student stu2("李四", 17);
    Student stu3("王五", 19);

    vector<Student*>v;
    v.push_back(&stu1);//向容器中存放数据的地址
    v.push_back(&stu2);
    v.push_back(&stu3);

    //遍历容器中的数据
    for (vector<Student*>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "姓名:" << (*it)->name << "  年龄:" << (*it)->age << endl;//it是指向数据地址的指针,*it是得到数据的地址,再通过->访问地址里面的内容
    }
    return 0;
}

3.容器嵌套容器

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void text()
{
    vector<vector<int>>v;

    //创建小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    vector<int>v4;

    //小容器中添加数据
    for (int i = 0; i < 4; i++)
    {
        v1.push_back(i + 1);
        v2.push_back(i + 2);
        v3.push_back(i + 3);
        v4.push_back(i + 4);
    }

    //将小容器插入到大容器中
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);

    for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++)//遍历所有数据
    {
        //*it-----vector<int>
        for (vector<int>::iterator t = (*it).begin(); t != (*it).end(); t++)
        {
            cout << (*t) << " ";
        }
        cout << endl;
    }
}
int main()
{
    text();
    return 0;
}

4.构造函数

vector<T> v;//采用类模板实现,默认构造函数
vector(v.begin(), v.end());//将v从v.begin()到v.end()区间之间的元素拷贝给本身
vector(n, elem);//构造函数将10个elem拷贝给本身
vector<T>v2(v);//拷贝构造,将v拷贝给v2
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>v)
{
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void text()//vector容器的构造(实际是初始化vector的对象v1,v2...)
{
    //方法1:默认构造,无参构造
    vector<int>v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);//插入数据
    }
    print(v1);
    //方法2:通过区间方式进行构造
    vector<int>v2(v1.begin(), v1.end());
    print(v2);

    //方法3:n个elem方式构造
    vector<int>v3(10, 11);
    print(v3);

    //方法4:拷贝构造
    vector<int>v4(v3);
    print(v4);
}
int main()
{
    text();
    return 0;
}

5.容量和大小

v.capacity();//容器的容量
v.size();//返回容器中规定元数个数
v.resize(int num);//重新指定容器长度为num,若容器变长,则以默认值填充新位置
                  //若容器变短,则末尾超出容器长度的元素被删除
v.resize(int num, elem);//重新指定容器长度为num,若容器变长,则以elem填充新位置
                       //若容器变短,则末尾超出容器长度的元素被删除
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>v)
{
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void text()//vector容器的构造(实际是初始化vector的对象v1,v2...)
{
    vector<int>v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    print(v1);

    if (v1.empty())//为真,代表容器为空
    {
        cout << "v1为空!"<<endl;
    }
    else
    {
        cout << "v1不为空!" << endl;
        cout << "v1的大小为:" <<v1.size()<< endl;
        cout << "v1的容量为:" << v1.capacity() << endl;
    }

    //重新指定大小
    v1.resize(15);//指定容器大小为15,之前已经有10个数据,剩下5个数据默认使用0填充
    //v1.resize(15,100);//重新指定比原来的size长了,此时使用100填充
    print(v1);
    cout << "v1的容量为:" << v1.capacity() << endl;

    v1.resize(5);//如果重新指定的比原来短了,超出部分会删除掉
    print(v1);

}
int main()
{
    text();
    return 0;
}

6.插入和删除

v.push_back(elem);//尾部插入元素elem
v.pop_back();//删除尾部元素
v.insert(v.begin(), elem);//在迭代器的位置上,插入elem
v.erase(v.begin);//删除第一个元素
v.erase(v.begin(), v.end());//清空
v.clear();//清空
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>v)
{
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void text()//vector容器的构造(实际是初始化vector的对象v1,v2...)
{
    vector<int>v1;
    //尾插
    v1.push_back(11);
    v1.push_back(22);
    v1.push_back(33);
    v1.push_back(44);
    v1.push_back(55);
    print(v1);

    //尾删
    v1.pop_back();
    print(v1);

    //插入
    v1.insert(v1.begin(), 100);//在迭代器的位置上,插入100
    print(v1);
    v1.insert(v1.begin(), 2, 200);//在最前面插入两个200
    print(v1);

    //删除
    v1.erase(v1.begin());//删除第一个元素
    print(v1);

    //清空
    v1.erase(v1.begin(), v1.end());//删除v1从头到尾所有元素
    print(v1);
    v1.clear();//第二种清空
    print(v1);
}
int main()
{
    text();
    return 0;
}

7.容器互换

v1.swap(v2);//实现v1和v2的数据互换
#include<iostream>
#include<vector>
using namespace std;
void print(vector<int>v)
{
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void text()
{
    vector<int>v1;
    vector<int>v2;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
        v2.push_back(i + 10);
    }
    cout << "交换前:" << endl;
    print(v1);
    print(v2);

    v1.swap(v2);
    cout << "交换后:" << endl;
    print(v1);
    print(v2);
}
void text2()//巧用swap收缩内存
{
    vector<int>v;
    for (int i = 0; i < 10000; i++)
    {
        v.push_back(i);
    }
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;

    v.resize(3);//重新指定大小
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;

    //巧用swap收缩内存
    vector<int>(v).swap(v);
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;
}

int main()
{
    text2();
    return 0;
}

三、string容器

1.string和char的区别

  • char* 是一个指针
  • string是一个类,类内部封装了char* ,管理这个字符串,是一个char* 型的容器

2.string的构造函数

string(); //创造一个空的字符串,例如string str
string(const char* s);//使用字符串s初始化
string(const string& str);//使用string对象初始化string的另外一个对象
string(int n, char c);//使用n个字符c初始化
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string s1;//创建空字符串,调用无参构造函数
    cout << "s1=" << endl;

    const char* s = "hello,world!";
    string s2(s);
    cout << "s2=" <<s2<< endl;

    string s3(s2);
    cout << "s3=" <<s3<< endl;

    string s4(6, 'A');
    cout << "s4=" <<s4<< endl;
}
int main()
{
    text();
    return 0;
}

3.赋值操作

string s1.assign(const char* s);//将字符串s赋值给s1
string s2.assign(const char* s, int n);//从字符串s中取前n个字符,赋值给s2
string s3.assign(const string s);//将s5赋值给s3
string s4.assign(int n, char c);//将n个字符c赋值给s4
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1;
    str1 = "hello,world!"; //将字符串hello, world!赋值给str4
    cout <<"str1 = "<< str1 << endl;

    string str2;
    str2 = str1;//将字符串str1赋值给str2
    cout << "str2 = " << str2 << endl;

    string str3;
    str3 = 'A';//将字符A赋值给str3
    cout << "str3 = " << str3 << endl;

    string str4;
    str4.assign("hello!");//将字符串hello!赋值给str4
    cout << "str4 = " << str4 << endl;

    string str5;
    str5.assign("hello,world", 5);//取前5个字符
    cout << "str5 = " << str5 << endl;

    string str6;
    str6.assign(str5);//将str5赋值给str6
    cout << "str6 = " << str6 << endl;

    string str7;
    str7.assign(6, 'A');//将6个A赋值给str7
    cout << "str7 = " << str7 << endl;
}

int main()
{
    text();
    return 0;
}

4.字符串拼接

string s1.append(string s)//将字符串s赋值给s1
string s2.append(string s,int n);//取字符串s的前n个字符连接在s2后面
string s3.append(string s, int pos, int n);//从字符串s下标为pos处开始取n个字符连接在s3后面
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "c语言";
    str1 += "程序设计";
    cout << "st1 = " << str1<<endl;

    string str2 = ",java";
    str1 += str2;//将s2拼接在s1后面
    cout << "str1 = " << str1 << endl;

    string str3 ="中国";
    str3.append(",美国");
    cout << "str3 = " << str3 << endl;

    str3.append("AAAAAAAA", 6);//取前6个字符连在字符串str3后面
    cout << "str3 = " << str3 << endl;

    str3.append(str2);//将字符串str2连在str3后面
    cout << "str3 = " << str3 << endl;

    string str4 = "complex,algorithm";
    str4.append(str4,4, 5);//从字符串str4下标为4处开始取5个字符,然后连接在str4后面
    cout << "str4 = " << str4 << endl;

}

5.查找和替换

string s1,s2,s3;
int pos = s1.find(s);//查找s在s1中第一次出现的位置(从左向右查找)
int pos_2 = s1.rfind(s);//查找s在s1中第一次出现的位置(从右向左查找)
int pos_3=s3.replace(int pos,int n,string s);//从下标为pos的位置开始的n个字符替换成s
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "abcdefghide";
    int pos=str1.find("de");//在字符串s1中查找字符串de
    if (pos == -1)
    {
        cout << "未找到字符串!"<<endl;
    }
    else//在str1中存在要寻找的字符串,返回寻找的字符串的第一个字符的下标
    {
        cout << "找到字符串,pos = " << pos << endl;
    }

    int pos_2 = str1.rfind("de");
    if (pos_2 == -1)
    {
        cout << "未找到字符串!" << endl;
    }
    else
    {
        cout << "找到字符串,pos_2 = " << pos_2 << endl;
    }
}
int main()
{
    text();
    return 0;
}

#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "abcdefgh";
    str1.replace(1, 3, "1111");//从下标为1的位置起的3个字符,替换为“1111”==>将bcd替换成1111
    cout << "str1 = " << str1 << endl;
}
int main()
{
    text();
    return 0;
}

6.比较

#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "hello,world!";
    string str2 = "hello,world";
    if (str1.compare(str2) == 0)//compare按照两个字符串的assic码值逐个对比
    {
        cout << "str1等于str2" << endl;
    }
    else if (str1.compare(str2) > 0)
    {
        cout << "str1大于str2" << endl;
    }
    else
    {
        cout << "str1小于str2" << endl;
    }
}
int main()
{
    text();
    return 0;
}

7.字符串的存取和单个字符的修改

#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "hello,world!";
    //方法1:
    for (int i = 0; i < str1.size(); i++)
    {
        cout << str1[i] << " ";
    }
    cout << endl;
    //方法2:通过at方式访问单个字符
    string str2 = "abcdefg";
    for (int i = 0; i < str2.size(); i++)
    {
        cout << str2.at(i) << " ";
    }
    cout << endl;

    //修改单个字符
    //方法1:
    str1[0] = 'a';
    cout << "str1 = " << str1 << endl;
    //方法2:
    str2.at(0) = 'b';
    cout << "str2 = " << str2 << endl;
}
int main()
{
    text();
    return 0;
}

8.插入和删除

string s1, s2;
s1.insert(int pos, string s);//从下标为pos位置开始插入字符串s
s2.erase(int pos, int n);//从下标为pos位置开始删除n个字符
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "hello,world!";
    str1.insert(1, "111");//从下标为1的位置开始插入111
    cout << "插入后,str1 = " << str1 << endl;//输出h111ello,world!

    str1.erase(1, 3);//从下标为1的位置开始删除3个字符
    cout << "删除后,str1 = " << str1 << endl;//输出hello,world!
}
int main()
{
    text();
    return 0;
}

9.子串的获取

string sub,s1;
sub = s1.substr(int pos, int n);//从s1字符串的下标为pos的位置开始向后取n个字符
#include<iostream>
#include<string>
using namespace std;
void text()
{
    string str1 = "hello,world!";
    string Substr = str1.substr(1, 3);//从str1字符串的下标为1的位置开始向后取3个字符
    cout << "Substr = " << Substr << endl;//输出ell
}
void text2()
{
    string email = "zhangsan@qq.com";
    int pos = email.find("@");
    string name = email.substr(0, pos);
    cout << "name = " <<name<< endl;//输出zhangsan
}
int main()
{
    text();
    text2();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/149274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux应用编程---5.多线程的创建以及线程间数据共享

Linux应用编程—5.多线程的创建以及线程间数据共享 5.1 多线程的创建 ​ 创建多线程&#xff0c;则多次调用pthread_create()函数。创建两个线程&#xff0c;线程1每隔一秒打印字符串&#xff1a;Hello world&#xff01;&#xff0c;线程2每隔一秒打印字符串&#xff1a;Goo…

【目标检测】Casecade R-CNN论文讲解(超详细版本)

目录&#xff1a;Casecade R-CNN论文讲解一、背景二、简单回顾R-CNN结构2.1 Training阶段2.2 Inference阶段三、论文摘要四、介绍五、关于mismatch问题六、关于单纯增大训练时IoU阈值问题七、相关工作7.1 two-stage7.2 one-stage7.3 multi-stage八、Cascade R-CNN讲解九、总结论…

【NI Multisim 14.0原理图设计基础——元器件分类】

目录 序言 一、元器件分类 &#x1f349;1.电源库 &#x1f349;2.基本元器件库 &#x1f349;3.二极管库 &#x1f349; 4.晶体管库 &#x1f349;5.模拟元器件库 &#x1f349; 6.TTL库 &#x1f349;7.CMOS库 &#x1f349;8.其他数字元器件库 &#x1f349;9.混合…

白帽子VPS 选购指南

本文长期更新&#xff0c;用于记录价格便宜&#xff0c;可以支持个人代码审计测试/部署资产监控任务/hw临时使用等。因为国内云服务器的一些限制&#xff0c;所以文章推荐服务器均为国外服务器&#xff0c;且不需要进行实名认证 PS&#xff1a;不要进行未授权非法活动&#xf…

2、HDFS 入门

一、概述 ​ HDFS&#xff08;Hadoop Distributed File System&#xff09;是分布式文件存储系统&#xff0c;主要用来解决海量数据的存储问题。HDFS比较适合一次写入&#xff0c;多次读出的场景。 NameNode&#xff08;NN&#xff09; 管理HDFS的namespace维护副本策略管理Bl…

黑马学ElasticSearch(二)

目录&#xff1a; &#xff08;1&#xff09;初始ES-安装IK分词器 &#xff08;2&#xff09;IK分词器的拓展和停用词典 &#xff08;3&#xff09;操作索引库-mapping属性 &#xff08;4&#xff09;操作索引库-创建索引库 &#xff08;5&#xff09;操作索引库-查询-删除…

2023浙大MPA项目复试参考

今年浙大MPA项目复试是否会恢复线下面试呢&#xff1f;从形式上来说&#xff0c;常规批复试无论是采取钉钉线上还是现场&#xff0c;似乎都可以顺利完成这一项研究生录取前的必要环节。但在2021年浙大MBA和MPA两个项目顶着风险组织了一次现场面试&#xff0c;只不过是放在了西溪…

EEG-SEED数据集作者的---基线论文阅读和分析

《Investigating Critical Frequency Bands and Channels for EEG-based Emotion Recognition with Deep Neural Networks》 方法&#xff1a; A.预处理根据被试的反应&#xff0c;只选择诱发目标情绪的实验时期进行进一步分析。 将原始脑电图数据降采样至200Hz采样率。目视…

【C语言课堂】 函数精讲

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; 前言&#xff1a; 上期我们详细讲了分支和循环语句&#xff0c;这次我们来讲解函数。说到函数&#xff0c;大家应该不陌生。C语言中的函数是什么样的呢&#xff1f;听我娓娓道来 ~ 目录 ❤️1.何为函数 &a…

目标检测:YOLO V1 思想总结

目标检测&#xff1a;YOLO V1 思想总结YOLO V1Introduction&#xff08;模型介绍&#xff09;Network Design&#xff08;网络设计&#xff09;Backbone&#xff08;骨干网络&#xff09;Grid Cell&#xff08;单元格&#xff09;Loss Function&#xff08;损失函数&#xff09…

信息系统项目管理师考点之进度与成本常见计算

信息系统项目管理师考点之进度与成本常见计算总时差和自由时差区别PERT技术进度管理常见问题解决方案挣值分析成本控制主要工作内容参考链接总时差和自由时差区别 总时差 指一项工作在不影响总工期的前提下所具有的机动时间 总时差 LS - ES LF - EF 自由时差 指一项工作在不…

【STL标准库 范型编程】学习笔记(1):C++学习网站、STL六大部件介绍

目录 简介C++学习网站STL六大部件学习来源结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国…

YUTU

FE: Cortex-R4 处理器 第一个基于 ARMv7-R 体系结构的深层嵌入式实时处理器 BE : Cortex-M3处理器 基于 ARMv7-M体系结构 The YuTu SoC is a Flash memory controller chip, which provides a PCIe Gen 3x4 host interface and 4 channels (up to 8 CEs per channel) Flash in…

【自学C++】C++变量赋值

C变量赋值 C变量赋值教程 变量 的赋值就是给已经定义的变量进行重新设置值的过程&#xff0c;C 中变量的赋值可以单独为单个变量赋值&#xff0c;也可以同时为多个变量赋值。 C变量赋值详解 语法 varname1 value1;参数 参数描述varname1需要赋值的变量。value1需要给变量…

【MySQL系列】Java的JDBC编程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、JCBD背景知识引入 二、安装MySQL数据库驱动包&#xff0c;并且导入到项目中 三、JDBC的使用 3.1 JDBC插入数据操作 3.2 JDBC修改数据操作…

哈希(C++)

C语言总结在这常见八大排序在这作者和朋友建立的社区&#xff1a;非科班转码社区-CSDN社区云&#x1f496;&#x1f49b;&#x1f499;期待hxd的支持哈&#x1f389;&#x1f389;&#x1f389;最后是打鸡血环节&#xff1a;想多了都是问题&#xff0c;做多了都是答案&#x1f…

计算机网络复习之运输层

文章目录ARQ协议停等式ARQ回退n帧的ARQ&#xff08;GBN&#xff09;选择性重传ARQ&#xff08;SR&#xff09;UDP协议TCP协议TCP协议的特点TCP报文段首部格式TCP连接管理TCP可靠传输TCP的流量控制TCP拥塞控制参考拥塞&#xff1a;若对网络中某一资源的需求超过了该资源所能提供…

Jenkins安装

Jenkins安装1、Jenkins简介2、Jenkins安装2.1 安装条件2.2 安装JDK2.2.1 检索可用包2.2.2 安装2.3 下载Jenkins的war包2.4 启动jenkins并测试3、安装maven1、Jenkins简介 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件…

LeNet5—论文及源码阅读

LeNet5—论文及源码阅读&#x1f42c; 目录: 一、概论二、论文选读三、源码精读四、参考资料 一、概论 LeNet-5是一种经典的卷积神经网络结构&#xff0c;于1998年投入实际使用中。该网络最早应用于手写体字符识别应用中。普遍认为&#xff0c;卷积神经网络的出现开始于LeCu…

蓝牙Inquiry与Inquiry Scan

文章目录一、Inquiry和Inquiry Scan二、Inquiry的三种模式2.1 Inquiry命令2.2 标准Inquiry应答2.3 带RSSI的Inquiry应答2.4 带EIR的Inquiry应答三、Extend Inquiry Response3.1 EIR数据格式3.2 EIR数据注册3.3 EIR数据解析示例3.4 获取对端设备名称的方法四、Inquiry Scan参数一…