【C++初阶】list的常见使用操作

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、list的基本概念
  • 二、list的构造
      • 2.1 默认构造
      • 2.2 拷贝构造函数
      • 2.3 用n个值为val的元素构造
      • 2.4 用迭代区间的元素构造
  • 三、list的迭代器begin + end
  • 四、list的容量操作
      • 4.1 size
      • 4.2 empty
  • 五、list的遍历
      • 5.1 迭代器遍历
      • 5.2 范围for
  • 六、list的获取元素操作
      • 6.1 front
      • 6.2 back
      • 七、list的对容器修改操作
      • 7.1 push_front
      • 7.2 pop_front
      • 7.3 push_back
      • 7.4 pop_back
      • 7.5 insert + 迭代器随机访问问题
      • 7.6 erase + 迭代器失效问题
      • 7.7 swap
      • 7.8 clear
  • 八、其他操作(常见)
      • 8.1 reverse
      • 8.2 sort
      • 8.3 remove
      • 8.4 unique
  • 九、 list与vector的对比

一、list的基本概念

  • 功能:将数据进行链式存储。
  • 链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。
  • 链表的组成:链表由一系列结点组成。
  • 结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
  • STL中的链表是一个 双向带头循环链表。这意味着链表中的每个节点都包含指向前一个节点和后一个节点的指针,而头节点和尾节点互相连接形成一个循环。这样的设计使得在链表中插入、删除节点的操作更加高效,同时也提供了双向遍历链表的能力。
  • list的数据域同样可以存储不同数据类型,因此它同样是一个模板容器
    在这里插入图片描述

二、list的构造

2.1 默认构造

list<int> l;

构造空的list对象

在这里插入图片描述

2.2 拷贝构造函数

【函数原型】

list (const list& x)

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l1{ 1,2,3,4,5 };cout << "l1:";for (auto x : l1){cout << x << ' ';}cout << endl;// 拷贝构造函数list<int> l2(l1);cout << "l2:";for (auto x : l2){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

2.3 用n个值为val的元素构造

【函数原型】

list (size_type n, const value_type& val = value_type())

没有显示给出第二个参数默认为0

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{// 初始化10个'a'list<char> lc(10, 'a');for (auto x : lc){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

2.4 用迭代区间的元素构造

【函数原型】

list (InputIterator first, InputIterator last)

注意:迭代区间的范围通常是左闭右开的[first, last)

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{int a[] = { 0,1,2,3,4,5,6,7,8,9 };int size = sizeof(a) / sizeof(a[0]); // 计算元素个数list<int> ll(a, a + size);for (auto x : ll){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

三、list的迭代器begin + end

  • begin:返回第一个元素的迭代器
  • end:返回最后一个元素下一个位置的迭代器
    在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l4{ 1,2,3 };list<int>::iterator it = l4.begin();while (it != l4.end()){cout << *it << ' ';it++;}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

四、list的容量操作

4.1 size

功能:返回list中有效节点的个数

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l4{ 1,2,3 };cout << "有效节点个数:" << l4.size() << endl;return 0;
}

【输出结果】

在这里插入图片描述

4.2 empty

功能:检测list是否为空,是返回true,否则返回false

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l4;if (l4.empty()){cout << "l4是空结点" << endl;}else{cout << "l4不是空结点" << endl;cout << "l4的有效结点" << l4.size() << endl;}return 0;
}

【输出结果】

在这里插入图片描述

五、list的遍历

list本质是链表,不是用连续性空间存储数据的。因此,list是不支持下标访问[]

5.1 迭代器遍历

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<char> lc;// 尾插lc.push_back('c');lc.push_back('x');lc.push_back('k');lc.push_back('h');lc.push_back('s');list<char>::iterator it = lc.begin();while (it != lc.end()){cout << *it << ' ';it++;}cout << endl;// 以上代码可以结合成for循环的形式// list<char>::iterator太长可使用autofor (auto it = lc.begin(); it != lc.end(); it++){cout << *it << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

5.2 范围for

由于list支持迭代器,那么就一定支范围for。因为范围for的底层就是迭代器实现的

【代码实现】

#include <iostream>
#include <list>
using namespace std;int main()
{list<char> lc;// 尾插lc.push_back('c');lc.push_back('x');lc.push_back('k');lc.push_back('h');lc.push_back('s');for (auto x : lc){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

六、list的获取元素操作

6.1 front

功能:返回list的第一个节点中值的引用。

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.push_back(5);cout << "第一个结点的值:" <<  l5.front() << endl;return 0;
}

【输出结果】

在这里插入图片描述

6.2 back

功能:返回list的最后一个节点中值的引用。

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.push_back(5);cout << "最后一个节点的值:" << l5.back() << endl;return 0;
}

【输出结果】

在这里插入图片描述

七、list的对容器修改操作

7.1 push_front

功能:头插

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.push_back(5);// 头插l5.push_front(100);for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.2 pop_front

功能:头删

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.push_back(5);l5.pop_front();for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.3 push_back

功能:尾插

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.push_back(5);for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.4 pop_back

功能:尾删

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.pop_back();for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.5 insert + 迭代器随机访问问题

vector开始insert都是使用迭代器来访问的

在这里插入图片描述

假设已有数据:1 2 3 4,现要在2后插入100。根据以往所学知识不难可以写出以下代码:

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);l5.insert(l5.begin() + 2, 100);for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

可惜报错了。

原因是:list本质是链表,不是用连续性空间存储数据的,迭代器也是不支持随机访问的,只能支持++--操作(支持双向遍历)

那可能就有人想,++的底层就是+1,那么为什么+1不行,而++可以?

这都归功于类的封装,在对迭代器封装的时候,重新的定义了这些符号的意义,也就是符号的重载。这才使得我们能就像使用指针一样去使用迭代器。下面是list的源代码(部分)

 self& operator++() { node = (link_type)((*node).next);return *this;}self operator++(int) { self tmp = *this;++*this;return tmp;}
self& operator--() { node = (link_type)((*node).prev);return *this;
}
self operator--(int) 
{ self tmp = *this;--*this;return tmp;
}

【正确写法】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l5;l5.push_back(1);l5.push_back(2);l5.push_back(3);l5.push_back(4);auto it = l5.begin();for (int i = 0; i < 2; i++){it++;}l5.insert(it, 100);for (auto x : l5){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

接下来我们想,对于insertlist会和vector一样有迭代器失效的问题吗?

答案是没有。原因是:vector在插入时,如果遇到扩容才会存在迭代器失效,而list不存在扩容。

7.6 erase + 迭代器失效问题

功能:删除list position位置的元素

在这里插入图片描述

【代码示例】

目的:删除所有元素

#include <iostream>
#include <list>
using namespace std;int main()
{int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(a, a + sizeof(a) / sizeof(a[0]));cout << "删除前:";for (auto x : l){cout << x << ' ';}cout << endl;auto it = l.begin();while (it != l.end()){l.erase(it);++it;}cout << "删除后:";for (auto x : l){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

程序崩了!

这和vector的情况类似,erase()函数执行后,it所指向的节点已被删除,因此it无效。

解决方法:在下一次使用it时,必须先给其赋值

【正确代码】

#include <iostream>
#include <list>
using namespace std;int main()
{int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(a, a + sizeof(a) / sizeof(a[0]));cout << "删除前:";for (auto x : l){cout << x << ' ';}cout << endl;auto it = l.begin();while (it != l.end()){// l.erase(it); 错误it = l.erase(it);}cout << "删除后:";for (auto x : l){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.7 swap

功能:交换两个list中的元素

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l1;l1.push_back(1);l1.push_back(1);l1.push_back(1);l1.push_back(1);list<int> l2;l2.push_back(2);l2.push_back(2);l2.push_back(2);l2.push_back(2);cout << "交换前" << endl;cout << "l1:";for (auto x : l1){cout << x << ' ';}cout << endl;cout << "l2:";for (auto x : l2){cout << x << ' ';}cout << endl;l1.swap(l2);cout << "交换后" << endl;cout << "l1:";for (auto x : l1){cout << x << ' ';}cout << endl;cout << "l2:";for (auto x : l2){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

7.8 clear

功能:清空list中所有的有效元素

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> l1;l1.push_back(1);l1.push_back(1);l1.push_back(1);l1.push_back(1);l1.clear();if (l1.empty()){cout << "已清空" << endl;}return 0;
}

【输出结果】

在这里插入图片描述

八、其他操作(常见)

在这里插入图片描述

主要讲解画方括号的,剩下的自行了解即可~

8.1 reverse

功能:逆置list

在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<char> lc1;lc1.push_back('a');lc1.push_back('b');lc1.push_back('c');lc1.push_back('d');// list的逆置接口lc1.reverse();for (auto x : lc1){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

其实list设计这个接口没有必要,因为算法库(algorithm)也设计了reverse算法

在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
#include <algorithm> // 使用算法库需要包含头文件
using namespace std;int main()
{list<char> lc1;lc1.push_back('a');lc1.push_back('b');lc1.push_back('c');lc1.push_back('d');// 算法库逆置reverse(lc1.begin(), lc1.end());for (auto x : lc1){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

8.2 sort

功能:排序list。注意:list底层的sort是归并算法

在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> ll;ll.push_back(5);ll.push_back(4);ll.push_back(1);ll.push_back(2);ll.push_back(6);ll.push_back(3);ll.sort();for (auto x : ll){cout << x << ' ';}cout << endl;return 0;
}

但是算法库里面也设计了一个sort,但注意:算法库里面的sort对于list是用不了的。

在这里插入图片描述

首先从模板参数上就能发现名字有所不同

事实上,这是因为迭代器从功能上进行了分类。

  • InputIterator就是所有迭代器都可以用。

在这里插入图片描述

  • bidirectional这种迭代器就适合双向的迭代器用。

在这里插入图片描述

  • RadomAccessIterator就适合随机迭代器去使用。
    在这里插入图片描述

因此,由于list适合双向迭代器,所以用不了库里的sort(RadomAccessIterator)

那我们怎么知道一个容器是什么类型的迭代器呢?很简单,查文档就行:点击跳转

这里我为大家总结了一些常见容器的迭代器:

在这里插入图片描述

因此,list接口中实现sort还是有点意义的。我只是说“有点”。

在排序中,vector的排序速度要比list快。这是因为vector是一个连续存储的容器,它的元素在内存中是相邻的,可以利用局部性原理进行高效的排序算法,如快速排序。

相比之下,list是一个链表结构,其元素在内存中是分散存储的,无法直接利用局部性原理,因此排序操作的性能通常较慢。

在某些特定情况下,list可能更适合进行插入和删除操作,因为它对于这些操作的开销较小。因此,在选择容器时,应该根据具体的需求来决定使用哪种容器。

8.3 remove

功能:删除list某个有效数据

在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> lit;lit.push_back(1);lit.push_back(2);lit.push_back(3);lit.push_back(4);for (auto x : lit){cout << x << ' ';}cout << endl;// 删除4lit.remove(4);for (auto x : lit){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

8.4 unique

功能:去重。但是要注意首先得先进行排序,才能进行去重。否则效率极低

在这里插入图片描述

【代码示例】

#include <iostream>
#include <list>
using namespace std;int main()
{list<int> lit;lit.push_back(3);lit.push_back(4);lit.push_back(1);lit.push_back(2);lit.push_back(4);for (auto x : lit){cout << x << ' ';}cout << endl;// 去重lit.sort();lit.unique();for (auto x : lit){cout << x << ' ';}cout << endl;return 0;
}

【输出结果】

在这里插入图片描述

九、 list与vector的对比

vectolist
底层结构动态顺序表,一段连续的空间带头结点的双向循环链表
随机访问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素
插入和删除任意位置插入和删除效率低,需要搬移元素,时间复杂度为O(N),插入时有可能需要增容,增容:开辟新空间,拷贝元素,释放旧空间,导致效率更低任意位置插入和删除效率高,不需要搬移元素,时间复杂度为O(1)
空间利用率底层为连续空间,不容易造成内存碎片,空间利用率高,缓存利用率高底层节点动态开辟,小节点容易造成内存碎片,空间利用率低,缓存利用率低
迭代器原生态指针对原生态指针(节点指针)进行封装
迭代器失效问题在插入元素时,要给所有的迭代器重新赋值,因为插入元素有可能会导致重新扩容,致使原来迭代器失效,删时,当前迭代器需要重新赋值否则会失效插入元素不会导致迭代器失效,删除元素时,只会导致当前迭代器失效,其他迭代器不受影响
使用场景需要高效存储,支持随机访问,不关心插入删除效率大量插入和删除操作,不关心随机访问

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jumpserver堡垒机管理(安装和相关操作)-------从小白到大神之路之学习运维第89天

第四阶段 时 间&#xff1a;2023年8月28日 参加人&#xff1a;全班人员 内 容&#xff1a; Jumpserver堡垒机管理 目录 一、堡垒机简介 &#xff08;一&#xff09;运维常见背黑锅场景 &#xff08;二&#xff09;背黑锅的主要原因 &#xff08;三&#xff09;解决背黑…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage)&#xff1a;准备场景信息&#xff08;视景体&#xff0c;摄像机参数&#xff09;、粗粒度剔除、定义每个模型的渲染命令&#xff08;材质&#xff0c;shader&#xff09;——由开发者定义&#xff0c;不做讨论。几何阶段(GemetryStage)&…

centos服务器系统下安装python3并与自带的python2

centos服务器系统下安装python3并与自带的python2 在centos中&#xff0c;自带有python2&#xff0c;因此需要经常安装python3。但是这里有一个坑&#xff0c;就是centos的yum是用python2写的&#xff0c;如果正常编译安装python3&#xff0c;那么yum就会直接挂了。为了方便以…

PDF校对:让您的文件无瑕疵

无论您是企业家、学生、教育者还是作家&#xff0c;我们都知道&#xff0c;提交或发布一个充满错误的PDF文件可能会给您的声誉或品牌带来严重损害。这就是为什么PDF校对如此关键的原因。现在&#xff0c;让我们深入了解PDF校对的重要性&#xff0c;以及如何确保您的文件尽可能完…

[NLP]LLM--transformer模型的参数量

1. 前言 最近&#xff0c;OpenAI推出的ChatGPT展现出了卓越的性能&#xff0c;引发了大规模语言模型(Large Language Model, LLM)的研究热潮。大规模语言模型的“大”体现在两个方面&#xff1a;模型参数规模大&#xff0c;训练数据规模大。以GPT3为例&#xff0c;GPT3的参数量…

MDK 5.xx.0 + STM32F10x 笔记

天才脑袋比不上烂笔头, 写给自己看, 自用资料。 安装MDK STM32环境 Download MDK安装 MDK -> c:\keil_v5 用默认路径下载 ARMCC V5.06 Update 7 (build960) <- 长期稳定支持版本安装至 c:\keil_v5\arm\ARMCC开启 uVision.设定 预设编译程序版本 : V5.06 Update 7 (bui…

git分支管理策略

git的基础操作以及常用命令在上篇博客哦~ git原理与基本使用 1.分支管理 1.主分支 在版本回退⾥&#xff0c;我们已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成⼀条时间线&#xff0c;这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前&#xff0c;只有⼀条时间线&…

python的安装(推荐)

torch安装与卸载推荐链接1推荐链接2 推荐链接3 安装pytorch步骤推荐链接 python关键字&#xff1a;

【CSS 画个梯形】

使用clip-path: polygon画梯形 clip-path: polygon使用方式如下&#xff1a; 效果实现 clip-path: polygon 是CSS的属性之一&#xff0c;用于裁剪元素的形状。它可以通过定义一个具有多边形顶点坐标的值来创建一个多边形的裁剪区域&#xff0c;从而实现元素的非矩形裁剪效果。…

软件测试用例经典方法 | 因果图法及案例

典型的黑盒测试用例设计方法包括等价类划分法、边界值分析法、决策表法、因果图法等。 如果程序的输入条件之间相互存在联系,那么就会使情况变得复杂,因为要检查输入条件的组合情况并不是一件容易的事情,即使把所有输入条件划分为等价类,它们之间的组合情况也相当多,难以分析。…

pdf怎么压缩到1m以内?分享3个pdf压缩技巧

PDF是我们常用的文件类型&#xff0c;它旨在保留文档原样式和格式&#xff0c;因此通常情况下要比其他文件格式大一些&#xff0c;特别是那些包含了大量图片的PDF文件&#xff0c;文件大小都比较大&#xff0c;给我们的存储和传输带来了困难。 针对过大的PDF文件&#xff0c;想…

伦敦金走势多变怎么办

投资知识比较丰富的朋友&#xff0c;应该知道一个品种的价格过于波动&#xff0c;对投资者来说并是一件不友好的事情&#xff0c;因为频繁的价格变化&#xff0c;对于收益的稳定性会产生负面的影响&#xff0c;也可能让投资者的持仓陷入进退维谷的尴尬境地。 黄金作为贵金属市场…

软考:中级软件设计师:HTML

软考&#xff1a;中级软件设计师:HTML 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff…

Unity——DOTween插件使用方法简介

缓动动画既是一种编程技术&#xff0c;也是一种动画的设计思路。从设计角度来看&#xff0c;可以有以下描述 事先设计很多基本的动画样式&#xff0c;如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示&#xff0c;一般封装为程序函数动画的参数可以在使用时指定&…

python-数据可视化-使用API

使用Web应用程序编程接口 &#xff08;API&#xff09;自动请求网站的特定信息而不是整个网页&#xff0c;再对这些信息进行可视化 使用Web API Web API是网站的一部分&#xff0c;用于与使用具体URL请求特定信息的程序交互。这种请求称为API调用 。请求的数据将以易于处理的…

Visual Studio2022史诗级更新,增加多个提高生产力的功能

Visual Studio 2022发布了17.7x版&#xff0c;这次更新中&#xff0c;增加多个提高生产力的功能以及性能进一步改进。 如果要体验新功能&#xff0c;需要将Visual Studio 2022的版本升级到17.7及以上 下面我们看看新增的功能以及改进的功能&#xff01; 目录 文件比较自动修复代…

Redis限流实践:实现用户消息推送每天最多通知2次的功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

爬虫(bilibili热门课程记录)

什么是爬虫&#xff1f;程序蜘蛛&#xff0c;沿着互联网获取相关信息&#xff0c;收集目标信息。 一、python环境安装 1、先从Download Python | Python.org中下载最新版本的python解释器 2、再从Download PyCharm: Python IDE for Professional Developers by JetBrains中下…

第59步 深度学习图像识别:误判病例分析(TensorFlow)

基于WIN10的64位系统演示 一、写在前面 本期内容对等于机器学习二分类系列的误判病例分析&#xff08;传送门&#xff09;。既然前面的数据可以这么分析&#xff0c;那么图形识别自然也可以。 本期以mobilenet_v2模型为例&#xff0c;因为它建模速度快。 同样&#xff0c;基…

深度学习算法模型转成算能科技平台xx.bmodel模型的方法步骤

目录 1 docker镜像下载 2 SDK下载 3 下载sophon-demo 4 修改docker镜像的脚本 5 创建个文件夹 6.source 7.转模型 1 docker镜像下载 可以在dockerhub看到镜像的相关信息 https://hub.docker.com/r/sophgo/tpuc_dev/tags 用下面的命令下载 docker pull sophgo/tpuc_d…