Vue2 —— 学习(三)
目录
一、绑定 class 样式
(一)字符串写法
1.流程介绍
2.代码实现
(二)数组写法
1.流程介绍
2.代码实现
(三)对象写法
1.流程介绍
2.代码实现
二、绑定 style 样式(了解)
(一)对象写法
(二)数组写法
三、条件渲染
(一)v-show 渲染
(二)v-if 渲染
1.v-if
2.v-else-if
3.v-else
4.注意事项
v-if 不允许被打断
模板标签 tempalate
四、列表渲染
(一)v-for 遍历
1.遍历数组
2.遍历对象
3.遍历字符串 少见
4.遍历指定次数 特别少见
(二)v-for 中 key 的原理
1.简单介绍
2.常见错误
3.总结
(三)列表信息过滤
1.使用 watch 监听实现
2.使用 计算属性 监听实现
(四)列表排序
五、Vue 检测数据原理
(一)问题提出
(二)检测对象
1.数据代理回顾
2.监测过程
3.实例说明
(三)检测数组
1.监测过程
2.实例说明
(四)数据劫持
(五)完整代码
一、绑定 class 样式
(一)字符串写法
1.流程介绍
适用于样式的类名不确定 需要动态指定
通过 指令绑定的形式,在模板中的类标签绑定 Vue 实例中的数据 mood
<div class="basic" :class="mood" @click="changeMood">test</div>
在实例对象的 data 加入 mood 属性并且 用对应的类名赋值
data: {name: '一个人',mood: 'normal'},
根据以上原理 我们能设计出 一个点击切换样式的效果
点击切换成 happy 类名 中的样式
2.代码实现
<body><div id="root"><div class="basic" :class="mood" @click="changeMood">test</div><script>new Vue({el: '#root',data: {name: '一个人',mood: 'normal'},methods: {changeMood() {this.mood = 'happy'}},})</script></div>
</body>
随机显示背景颜色函数设计,把三个类名存到数组中,然后随机取下标,进行读取就行
methods: {changeMood() {const arr = ['happy', 'sad', 'normal']const index = Math.floor(Math.random() * 3)this.mood = arr[index]}},
(二)数组写法
1.流程介绍
适用于绑定的样式个数不确定,名字也不确定
想要随时添加样式删除样式 就在模板中 插值一个数组类型的数据
<div class="basic" :class="arr" @click="changeMood">test</div>
然后在 data 中添加一个数组类型的数据,在数组里面放入我们要展示的类名 ,我们还能通过操作数组进行,增加和删除样式
data: {name: '一个人',mood: 'normal',arr:['normal','happy','bianhua'],},
删除
vm.arr.shift()
增加
vm.arr.push('增加的类名')
2.代码实现
<body><div id="root"><div class="basic" :class="arr" @click="changeMood">test</div></div><script>new Vue({el: '#root',data: {arr:['normal','happy','bianhua'],},})</script></div>
</body>
(三)对象写法
1.流程介绍
适用于绑定的样式确定 名字也确定 要动态决定用不用
先绑定对象
<div class="basic" :class="Obj" @click="changeMood">test</div>
在实例对象 vm 中的 data 对象中写一个对象类型数据 里面放着样式类名 通过 true 和 false 来判断使用不使用这个样式
data: {name: '一个人',mood: 'normal',arr:['normal','happy','bianhua'],Obj:{happy:true,bianhua:true}},method
2.代码实现
<body><div id="root"><div class="basic" :class="Obj" @click="changeMood">test</div></div><script>new Vue({el: '#root',data: {Obj:{happy:true,bianhua:true}},})</script></div>
</body>
二、绑定 style 样式(了解)
除了可以用 class 绑定样式 我们还可以通过内联 style 来绑定样式
(一)对象写法
先绑定对象
<div class="basic" :style="Obj" @click="changeMood">test</div>
在实例对象 vm 中的 data 对象中写一个样式对象,里面的属性就是我们要设置的样式,属性名不能随便写,得遵循 css 中的属性名
Obj: {fontSize: '40px'}
(二)数组写法
不常用,如果要写很多的样式 我们能分开写
<div class="basic" :style="Obj" @click="changeMood">test</div>
styleArr:[{ fontSize: '40px' },{backgroundColor: 'blue'}]
三、条件渲染
(一)v-show 渲染
变化频率高的时候使用v-show
隐藏标签的内容,节点还在但是被隐藏了
v-show=‘false’ 内容隐藏 true 就是显示
<h2 v-show="false">欢迎来到{{name}}</h2>
引号里面可以写表达式,还有 vm 中的数据 ,比如 v-show='a' 在 vm 实例的数据中添加 a 的具体值 实现动态的显示和隐藏
还能写 v-show=‘a=1’ 判断布尔值 具体是什么 为真则显示 假则隐藏
(二)v-if 渲染
变化频率低的时候使用v-if 因为很暴力不展示的元素直接删除
1.v-if
判断里面是否为真为真就显示 为假就删除
<h2 v-if="false">欢迎来到{{name}}</h2>
2.v-else-if
和 if 和 elseif 使用方法类似 先判断 if 如果不符合 再依次往下判断 但是一旦为真 就不再判断下面的了,如果同时三个 v-if 则每行语句都需要重新判断。
<div v-if="n===1">n=1</div><div v-else-if="n===2">n=2</div><div v-else-if="n===3">n=3</div>
3.v-else
和 else 用法差不多 但是后面不要接数值了 ,如果 v-if 和v-else-if 中的语句都为假 就显示 v-else 中的语句
<div v-if="n===1">n=1</div><div v-else-if="n===2">n=2</div><div v-else-if="n===3">n=3</div><div v-else>n是个厉害</div>
4.注意事项
v-if 不允许被打断
如果在v-else-if 中间添加了其他的标签,就不会执行后面的语句。下面只能输出 n=1 和 n=2 其它找不到了
<div v-if="n===1">n=1</div><div v-else-if="n===2">n=2</div><div>@</div><div v-else-if="n===3">n=3</div><div v-else>n是个厉害</div>
模板标签 tempalate
如果想让下面几个 h2 标签都在 a=1 时显示出来
我们可能会想到每个标签都加一个 v-if 判断条件的写法 但是太复杂
<h2 v-if="true">你好</h2><h2 v-if="true">您好</h2><h2 v-if="true">我们好</h2>
我们可以用一个模板 template 来包裹这些都要显示的标签,然后给这个模板一个 v-if=’n===1‘,就可以控制所有的标签的显示了,而且使用模板不会影响标签结构,当展示出来的时候模板会自动脱落,记住不能和 v-show 使用
<template v-if="n === 1 "><h2>你好</h2><h2>您好</h2><h2>我们好</h2></template>
四、列表渲染
(一)v-for 遍历
1.遍历数组
数组信息:
persons:[{id: '001',name: '张三',age: 18},{id: '002',name: '李四',age: 19},{id: '003',name: '王五',age: 20},],
遍历生成相同 的 结构标签 前面一个变量 代表后面的数组每次遍历的当前元素
in 可以换成 of
<li v-for="p in persons">{{p.name}}-{{p.age}}</li>
里面最好写上每个生成的 li 标签的 key 值就是每个生成出的标签独特的标识 ,每个生成的 li 的 key 值应该不同 切忌写成 :key='1' 这样每个生成的 li 标签的 key 值相同就会报错,就和身份证不能一样类比。
<li v-for="p in persons" :key='p.id'>{{p.name}}-{{p.age}}</li>
其 v-for=‘p in persons’ in 前面可以有两个变量,完整写法是 v-for=‘(p,index) in persons’
括号里面第一个变量代表后面的数组每次遍历的当前元素,第二代表当前元素的下标
所以我们 的 key 值还有第二种写法
<li v-for="(p,index) in persons" :key='index'>{{p.name}}-{{p.age}}</li>
2.遍历对象
对象信息:
car:{name:'小汽车',price:'100万',color:'白色'}
遍历对象
和遍历数组类似,在遍历对象时前面也会收到两个数据 第一个是 value 就是当前属性的属性值
key 是当前属性的属性名
<li v-for="(value,k) in car" :key="k">{{k}}-{{value}}</li>
3.遍历字符串 少见
str:'hello'
和前面类似 v-for 里面也会收到两个数据 一个是 当前字符 另一个是当前字符的下标
<li v-for="(char,index) in str" :key="index">{{char}}-{{index}}</li>
4.遍历指定次数 特别少见
下面是只当遍历 5 次
number 是从1开始的数字 1 2 3 4 5 index 是从 0 开始的下标 0 1 2 3 4
<li v-for="(number,index) in 5" :key="index">{{number}}-{{index}}</li>
(二)v-for 中 key 的原理
1.简单介绍
key 如果不写默认是 下标就是 index
key 的作用就是给节点进行标识 类似于人类的身份证号,在页面中查看真实 dom 结构发现 li 没有 key 属性 因为key 被 Vue 内部使用,当 Vue 把 li 转化成真实 dom 节点时就把 key 这个特殊属性征用了,给 Vue 自己用 不给别人显示,如果换成别的属性名就显示了
<li v-for="(p,index) in persons" :key="index">{{p.name}}-{{p.age}}</li>
2.常见错误
但是如果使用 index 作为 key 的 值使用 一定情况下会发生错误,比如我们想三个人前面加一个王五,但是我们先在每个人后面添加一个文本框,然后输入三个人的信息,然后再添加这个王五,我们发现信息篡位了,具体流程如下:通过虚拟 dom 节点的(diff)对比算法 进行更新
效率较低,因为复用的比较少
我们可以通过使用 id 来作为 key 的值来使用来解决这个问题,数据不会错位也提高了代码的效率
3.总结
1.可能产生的问题:
逆序添加数据,删除数据 破坏顺序的行为 会产生没有必要的真实dom 的更新,界面效果没问题,但是效率低。
如果结构中包含输入类的dom 会产生错误的 dom 更新 界面有问题
2.如何选择 key :
使用每一条数据的唯一标识符为 key ,比如 id 手机号 身份证号唯一值
如果不存在逆序增加 删除 破坏顺序的操作,仅用于渲染列表用于展示,使用 index 作为 key 是没问题的
(三)列表信息过滤
1.使用 watch 监听实现
过滤器返回值是过滤数组的条件
空字符串包含在任何字符串之中,返回值是 0 不是 -1 所以能返回过滤数组
<body><div id="root"><h2>人员列表</h2><input type="" placeholder="请输入名字" v-model="keyword"><ul><li v-for="(p,index) in filPersons" :key="index">{{p.name}}-{{p.age}}-{{p.sex}}</li></ul></div><script>new Vue({el: '#root',data: {keyword: '',persons: [{ id: '001', name: '李三', age: 18, sex: '女' },{ id: '002', name: '李四', age: 19, sex: '男' },{ id: '003', name: '王四', age: 20, sex: '男' },],filPersons:[]},watch: {keyword:{immediate:true,handler(val) {this.filPersons = this.persons.filter((p) => {return p.name.indexOf(val) !== -1})}}}})</script>
</body>
2.使用 计算属性 监听实现
计算属性中 return 中才是返回的新的数组,不用在 data 中新创建一个空的数组来存最后的数据,不用给数组重新赋值
<body><div id="root"><h2>人员列表</h2><input type="" placeholder="请输入名字" v-model="keyword"><ul><li v-for="(p,index) in filPersons" :key="index">{{p.name}}-{{p.age}}-{{p.sex}}</li></ul></div><script>new Vue({el: '#root',data: {keyword: '',persons: [{ id: '001', name: '李三', age: 18, sex: '女' },{ id: '002', name: '李四', age: 19, sex: '男' },{ id: '003', name: '王四', age: 20, sex: '男' },],},computed: {filPersons() {return this.persons.filter((p) => {return p.name.indexOf(this.keyword) !== -1})}}})</script>
</body>
(四)列表排序
在过滤后的数组中进行操作,只要里面任何属性发生变化,就会重新调用
<body><div id="root"><h2>人员列表</h2><input type="" placeholder="请输入名字" v-model="keyword"><button @click="sortType = 2">年龄升序</button><button @click="sortType = 1">年龄降序</button><button @click="sortType = 0">原顺序</button><ul><li v-for="(p,index) in filPersons" :key="index">{{p.name}}-{{p.age}}-{{p.sex}}</li></ul></div><script>new Vue({el: '#root',data: {keyword: '',persons: [{ id: '001', name: '李三', age: 18, sex: '女' },{ id: '002', name: '李四', age: 50, sex: '男' },{ id: '003', name: '王四', age: 30, sex: '男' },],sortType: 0,},computed: {filPersons() {const arr = this.persons.filter((p) => {return p.name.indexOf(this.keyword) !== -1})if (this.sortType) {arr.sort((p1, p2) => {return this.sortType === 1 ? p2.age - p1.age : p1.age - p2.age})}return arr}}})</script>
</body>
五、Vue 检测数据原理
Vue 监测 data 中所有层次的数据
(一)问题提出
很重要,我们把 data 中的数据更改 vue 会有一个内置的watch监测,然后在页面中更改新的数据,这节我们得明白不是所有的,更改的情况我们 vue 都能监测并认可更改的,有的时候可能数据变了,但是vue 监测不到,数据不会更改
如下 我们想对数组对象中的第一对象中的属性进行修改,使用下面我们构造的方法,挨个属性进行修改,能成功实现更改第一个对象的属性,并成功被 vue 监测到 新的数据在模板中能成功显现出来
methods: {updataZhang() {this.persons[0].name = '李一百'this.persons[0].age = 20this.persons[0].sex = '男'}},
但是一旦我们换一个方法,我们使用一个新的对象来替换原来的对象的方法,就不能被 vue 监测到数据的变化,在页面中显示的还是原来被替换前的数据,但是数据确实被改变了,只是vue 无法监测而无法改变。这个问题是怎么回事? 稍后我们再解答
methods: {updataZhang() {this.persons[0] = { id: '001', name: '李一百', age: 20, sex: '男' }}},
(二)检测对象
通过 setter 实现监视 在 new 时就传入要检测 的数据,后面有如何追加新数据
1.数据代理回顾
数据代理过程如下图,其实应该有两个过程 如黄字所写,应该先加工一下 data , _data
中是加工后的 data 的值。
_data 里面是加工过后的 data 的内容 通过 getter 方法来获得 name 值 通过 setter 方法来修改name 值,所以_data 里面每一个元素都被加上了一个 getter 和 setter 方法,几个属性就几个getter setter
加工的意义是给 _data 变成响应式的数据,数据变页面也跟着变就是响应式,修改_data 中的属性引起 setter 方法的调用,setter 里面写了一个重新解析模板的内容 然后页面就更新了
2.监测过程
vue 监测对象中数据的变化就是通过 set 函数监测,vue 会将 data 中所有的数据都解析出来包括对象里面的每一个元素,对象中嵌套的对象里面的元素也能解析出来,并给每一个元素都配置一个 setter getter 方法,如果数据某个数据被更改,就会调用对应的 getter 方法,方法里面的语句是重新解析 vue 模板并更新显示模板,所以页面会更新。
3.实例说明
data: {name: '学校',address: '北京',student: {name: 'tom',age: {rage: 20,sage: 21},friends: [{ name: 'jerry', age: 35 },{ name: 'tony', age: 36 }]}},
如果想在对象 data 中的 student 对象中新增加一个属性 sex 并在页面中显示出来,
我们不能直接 vm.sex 这个行为很离谱 本来 vm 中的属性 name 这些都是数据代理来的 而我们想直接加一个 vm.sex 就没setter getter 方法 就不能更新
我们也不能 在 _data 中加一个 vm._data.student.sex,因为我们没经过 data 阶段的加工就进行增加 没有分配的 getter 和 setter,也不能更新
那么怎么追加响应式的属性呢? 我们可以使用 vue 提供的一个 API 来添加一个响应式的属性
Vue.set(vm._data.student,'sex','男')
括号里面是 在哪里追加, 追加的属性,和追加的属性值
vm.$set(vm._data.student,'sex','男') 同理 在vm 中追加
vm._data.student 等同于 vm.student 在数据代理中学过
Vue.set(vm.student,'sex','男')
这个方法只能给 data 数据中的 对象添加数据 不能直接给 data 和 Vue添加数据,这是不被 Vue 允许的
(三)检测数组
通过包裹数组更新元素的方法实现
1.监测过程
数组不是通过 setter getter 来监测数组内元素的变化的,不像对象那样里面每个属性都有一个getter setter,来监测变化 并重新在页面显示出来
而是当执行上面这些行为时 数组被改变了(过滤不影响原数组,要把过滤后的新数组赋给原数组就变了)vue 能监测到并能改变也页面的显示,使用了包装的方法
2.实例说明
为什么监测到这些行为 这些已经不是 Array 原型对象上的 方法了,而是 Vue 给我们包装的方法
拿push 举例
第一步 还是调用一下原来的 push 方法
第二步 重新解析模板 生成虚拟 dom 显示页面
Vue.set 方法也能对数组起效果,但不能给 vm 或 vm 的根对象加属性
Vue.set(vm._data.student,'sex','男')
括号里面是 在哪里追加,修改的元素下标,和追加的数组值
记得数据代理的知识 前面用到的 vm._data.student 可以简写成 vm.student
(四)数据劫持
把原本的数据变成能被监测的形式,就是当数据改变时 setter 就会劫持数据并重新解析渲染页面,是一个行为 。
(五)完整代码
这里是一个完整的练习代码可以看看加深理解
<body><div id="root"><h1>学校信息</h1><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2><h1>学生信息</h1><button @click="addSex">添加一个性别</button><h2>姓名:{{student.name}}</h2><h2>性别:{{student.sex}}</h2><h2>年龄:{{student.age.rage}} :对外:{{student.age.sage}}</h2><h2>盆友们</h2><ul><li v-for="(h,index) in student.hobby" :key="index">{{h}}</li></ul><h2>盆友们</h2><ul><li v-for="(f,index) in student.friends" :key="index">{{f.name}}---{{f.age}}</li></ul></div><script>new Vue({el: '#root',data: {name: '学校',address: '北京',student: {name: 'tom',age: {rage: 20,sage: 21},hobby:['抽烟','喝酒','烫头'],friends: [{ name: 'jerry', age: 35 },{ name: 'tony', age: 36 }]}},methods: {addSex() {Vue.set(this.student, 'sex', '男')}},})</script>
</body>
相关文章:
Vue2 —— 学习(三)
目录 一、绑定 class 样式 (一)字符串写法 1.流程介绍 2.代码实现 (二)数组写法 1.流程介绍 2.代码实现 (三)对象写法 1.流程介绍 2.代码实现 二、绑定 style 样式(了解ÿ…...
Qt Creator 12.0.2 debug 无法查看变量的值 Expression too Complex
鼠标放在局部变量上提示“expression too complex”。 在调试窗口也看不到局部变量的值。 这应该是qt的一个bug,https://bugreports.qt.io/browse/QTCREATORBUG-24180 暂时解决方法: 如下图,需要右键项目然后执行"Clean"和&quo…...
LeetCode-Java:303、304区域检索(前缀和)
文章目录 题目303、区域和检索(数组不可变)304、二维区域和检索(矩阵不可变) 解①303,一维前缀和②304,二维前缀和 算法前缀和一维前缀和二维前缀和 题目 303、区域和检索(数组不可变ÿ…...
出海业务的网络安全挑战
出海业务的扩展带来了巨大的市场机遇,同时也带来了不少网络安全挑战: 数据泄露与隐私保护:跨境数据传输增加了数据被截获和泄露的风险。地理位置限制和审查:某些地区的网络审查和地理位置限制可能阻碍企业正常开展业务。网络攻击…...
蓝桥杯考前准备— — c/c++
蓝桥杯考前准备— — c/c 对于输入输出函数 如果题目中有要求规定输入数据的格式与输出数据的格式,最好使用scanf()和prinrf()函数。 例如:输入的数据是 2020-02-18,则使用scanf("%d-%d-%d",&year,&mouth,&day)即可…...
【MATLAB源码-第4期】基于MATLAB的1024QAM误码率曲线,以及星座图展示。
1、算法描述 正交幅度调制(QAM,Quadrature Amplitude Modulation)是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度(π/2)的正弦波,因此被称作正交载波。这种调制方式因此而得…...
数据结构-----枚举、泛型进阶(通配符?)
文章目录 枚举1 背景及定义2 使用3 枚举优点缺点4 枚举和反射4.1 枚举是否可以通过反射,拿到实例对象呢? 5 总结 泛型进阶1 通配符 ?1.1 通配符解决什么问题1.2 通配符上界1.3 通配符下界 枚举 1 背景及定义 枚举是在JDK1.5以后引入的。主要用途是&am…...
线上问题监控 Sentry 接入全过程
背景: 线上偶发问题出现后 ,测试人员仅通过接口信息无法复现错误场景;并且线上环境的监控,对于提高系统的稳定性 (降低脱发率) 至关重要;现在线上监控工具这个多,为什么选择Sentry?…...
【数据库(MySQL)基础】以MySQL为例的数据库基础
文章目录 0. 本文用到的emp表,dept表,salgrade表1. MySQL入门2. 简单查询3. 字段计算4. 条件查询4.1 and4.2 null4.3 or4.4 and和or的优先级4.4 in 和 not in4.5 模糊查询 5. 排序5.1 简单排序5.2 两个字段排序5.3 综合排序 6. 一些常用函数6.1 大小写转换6.2 substr子字符串6.…...
权限修饰符,代码块,抽象类,接口.Java
1,权限修饰符 权限修饰符:用来控制一个成员能够被访问的范围可以修饰成员变量,方法,构造方法,内部类 👻👗👑权限修饰符的分类 🧣四种作用范围由小到大(private<空着…...
CSS设置文本
目录 概述: text-aling: text-decoration: text-transform: text-indent: line-height: letter-spacing: word-spacing: text-shadow: vertical-align: white-space: direction: 概述: 在CSS中我们可以设置文本的属性,就像Word文…...
【svg】—— java提取svg中的颜色
需要针对svg元素进行解析,并提取其中的颜色,首先需要知道svg中的颜色。针对svg中颜色的格式大致可以一般有纯色和渐变两种形式。对于渐变有分为:线性渐变和放射性渐变针对svg中的颜色支持16进制的格式,又可以支持RGB的格式&#x…...
论文分享 | FAST'23 阿里云提出的针对SMR优化的存储引擎SMRSTORE
今天分享的一篇最近阅读的论文是FAST23的SMRstore: A Storage Engine for Cloud Object Storage on HM-SMR Drives。 https://www.usenix.org/conference/fast23/presentation/zhou 这篇文章是由阿里巴巴公司完成的,在这篇文章中,团队针对SMR的特性提出了…...
题目:建造房屋 (蓝桥OJ3362)
问题描述: 代码: #include<bits/stdc.h> using namespace std; int n, m, k, ans, mod 1e9 7; long long dp[55][2605]; /*dp[i][j]:第i个街道上建j个房屋的总方案数枚举所有的转移,累加到dp[n][k]即总方案数 */ int main() {cin >> n &…...
智能合约平台开发指南
随着区块链技术的普及,智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款,大大减少了执行和监督合同条款所需的成本和时间。那么,如何开发一个智能合约平台呢?以下是一些关键步骤。 一、选择合适的区…...
数学建模-最优包衣厚度终点判别法(主成分分析)
💞💞 前言 hello hello~ ,这里是viperrrrrrr~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页ÿ…...
Mysql内存表及使用场景(12/16)
内存表(Memory引擎) InnoDB引擎使用B树作为主键索引,数据按照索引顺序存储,称为索引组织表(Index Organized Table)。 Memory引擎的数据和索引分开存储,数据以数组形式存放,主键索…...
Django交易商场
Hello,我是小恒不会java 最近学习django,写了一个demo,学到了不少东西。 我在GitHub上开源了,提示‘自行查看代码,维护,运行’。 最近有事,先发布代码了,我就随缘维护更新吧 介绍: 定…...
华为校园公开课走入上海交大,鸿蒙成为专业核心课程
4月12日,华为校园公开课在中国上海交通大学成功举办,吸引了来自计算机等相关专业的150余名学生参加。据了解,由吴帆、陈贵海、过敏意、吴晨涛、刘生钟等教授在中国上海交通大学面向计算机系本科生开设的《操作系统》课程,是该系学…...
【会员单位】泰州玉安环境工程有限公司
中华环保联合会理事单位 水环境治理专业委员会副主任委员单位 我会为会员单位提供服务: 1、企业宣传与技术项目对接; 2、企业标准、行业标准制定; 3、院士专家指导与人才培训 4、国际与国内会议交流 5、专精特新、小巨人等申报认证 6…...
Google视觉机器人超级汇总:从RT、RT-2到AutoRT/SARA-RT/RT-Trajectory、RT-H
前言 随着对视觉语言机器人研究的深入,发现Google的工作很值得深挖,比如RT-2 想到很多工作都是站在Google的肩上做产品和应用,Google真是科技进步的核心推动力,做了大量大模型的基础设施,服(推荐重点关注下Googl…...
LeetCode-1143. 最长公共子序列【字符串 动态规划】
LeetCode-1143. 最长公共子序列【字符串 动态规划】 题目描述:解题思路一:动规五部曲解题思路二:1维DP解题思路三:0 题目描述: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。…...
从0开始创建单链表
前言 这次我来为大家讲解链表,首先我们来理解一下什么是单链表,我们可以将单链表想象成火车 每一节车厢装着货物和连接下一个车厢的链子,单链表也是如此,它是将一个又一个的数据封装到节点上,节点里不仅包含着数据&…...
STC89C52学习笔记(十)
STC89C52学习笔记(十) 综述:本文介绍了DS18B20和单总线协议,以及讲述了如何使用DS18B20测量温度。 一、单总线协议 1.只有一根通讯线:DQ (常见的运用单总线的两种设备:DS18B20和DHT11&#…...
初识二叉树和二叉树的基本操作
目录 一、树 1.什么是树 2. 与树相关的概念 二、二叉树 1.什么是二叉树 2.二叉树特点 3.满二叉树与完全二叉树 4.二叉树性质 相关题目: 5.二叉树的存储 6.二叉树的遍历和基本操作 二叉树的遍历 二叉树的基本操作 一、树 1.什么是树 子树是不相交的;…...
如何开辟动态二维数组(C语言)
1. 开辟动态二维数组 C语言标准库中并没有可以直接开辟动态二维数组的函数,但我们可以通过动态一维数组来模拟动态二维数组。 二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组,也就是存放着一维数组地址的一维数组。 所以&…...
【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型)
【MATLAB第104期】基于MATLAB的xgboost的敏感性分析/特征值排序计算(针对多输入单输出回归预测模型) 因matlab的xgboost训练模型不含敏感性分析算法,本文通过使用single算法,即单特征因素对输出影响进行分析,得出不同…...
C语言程序与设计——工程项目开发
之前我们已经了解了C语言的基础知识部分,掌握这些之后,基本就可以开发一些小程序了。在开发时,就会出现合作的情况,C语言是如何协作开发的呢,将在这一篇文章进行演示。 工程项目开发 在开发过程中,你接到…...
【Java核心技术】第6章 接口
1 接口 接口不是类,而是对希望符合这个接口的类的一组需求 1.1 Comparable 接口 要对对象进行比较,就要实现(implement)比较(comparable)接口 注意: implements Comparable<Manager> Comparable接口是泛型接口 class Manager exten…...
【Java探索之旅】从输入输出到猜数字游戏
🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、输入输出1.1 输出到控制台1.2 从键盘输入 二、猜数字游戏2.1 所需知识:…...
建设医院网站ppt/杭州seo渠道排名
sqlserver2005连接远程服务器报错,以前用得好好的。今天上班来了就报错。郁闷!!!转载于:https://www.cnblogs.com/dreamstill/archive/2006/07/21/456793.html...
成都网站建设哪家/信阳网络推广公司
浅拷贝:当调用拷贝构造函数时,编译器默认会对数据成员逐一进行赋值,但当这些数据中如果有指针,这样的赋值会让多个指针指向同一块内存空间,这样多个对象会共用同一块内存空间,如果释放了一个对象指向的内存…...
做一个学校网站怎么做/风云榜百度
来自:http://zxs19861202.iteye.com/blog/2094614 最近在用openfire开发ios通讯功能,需要开发一个推送插件,导入openfire3.9.3的源码一直报错很郁闷,以下是解决源码导入eclipse报错的方法 入正题,看到这篇文章的的网友…...
wordpress设置备案/吉林关键词优化的方法
智东西(公众号:zhidxcom)编 | 智东西内参在刚刚结束的MWC 2019上,5G手机已然红遍巴塞罗那,成了当下最热门的话题。而对于每一台5G手机来说,其天线设计都至关重要。MIMO、载波聚合、波束赋形等5G新技术的应用…...
南宁网站建设公司排名/网站搜索引擎优化技术
定义:建表时在各字段类型后设置,用来对用户操作表的数据进行约束。 代码: 1.默认值 : default 作用:当用户对使用默认值的字段不插入值的时候,就使用默认值(自动填充)。 注意…...
搜狗站长工具/长沙seo优化首选
对于二进制文件的编辑,windows下有一款很优秀的软件winhex,会让你的生活非常简单。但是到了linux 下面似乎没有专门的二进制编辑器,但是大家不要忘了vim虽然vim并不是针对二进制编辑而设计,但是通过技巧也可让vim成为很好用的二进…...