【前端Vue】Vue0基础完整教程第5篇:vue指令(下),成绩案例【附代码文档】

Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{ gaga }},{{ if (obj.age > 18 ) { } }},vue指令,综合案例 - 文章标题编辑vue介绍,开发vue的方式,基本使用,如何覆盖webpack配置,目录分析与清理,vue单文件组件的说明,vue通过data提供数据,通过插值表达式显示数据,安装vue开发者工具,v-bind指令,v-on指令,v-if 和 v-show,v-model,v-text 和 v-html。day-08vuex介绍,语法,模块化,小结。面经PC端-element (上)初始化,request,router,login模块,layout模块,dashboard模块(了解)。面经PC端 - Element (下)Article / list 列表,Article / add 添加,Article / del 删除,Article / upd 修改,Article / preview 预览,yarn-补充。vue指令(下),成绩案例,计算属性,属性监听v-for,样式处理,基本结构与样式,基本渲染,删除,新增,处理日期格式,基本使用,计算属性的缓存的问题,成绩案例-计算属性处理总分 和 平均分,计算属性的完整写法,大小选,基本使用,复杂类型的监听-监听的完整写法,成绩案例-监听数据进行缓存,配置步骤 (两步),使用演示。vue指令(下),成绩案例,计算属性,属性监听v-for,样式处理,基本结构与样式,基本渲染,删除,新增,处理日期格式,基本使用,计算属性的缓存的问题,成绩案例-计算属性处理总分 和 平均分,计算属性的完整写法,大小选,基本使用,复杂类型的监听-监听的完整写法,成绩案例-监听数据进行缓存,配置步骤 (两步),使用演示。组件化开发,组件通信,todo案例,作业什么是组件化开发,组件的注册,全局注册组件,组件的样式冲突 ,组件通信 - 父传子 props 传值,v-for 遍历展示组件练习,单向数据流,组件通信 - 子传父,props 校验,布局,任务组件todo,列表,删除,修改:不做了!下面代码其实就是我想让大家练习,添加,剩余数量,清空已完成,小选与大选,筛选:作业,本地存储,附加练习_1.喜欢小狗狗吗,附加练习_2.点击文字变色,附加练习_3. 循环展示狗狗,附加练习_4.选择喜欢的狗。v-model,ref 和 nextTick,dynamic 动态组件,自定义指令,插槽,案例:商品列表v-model 语法糖,v-model给组件使用,动态组件的基本使用,自定义指令说明,自定义指令 - 局部注册,自定义指令 - 全局注册,自定义指令 - 指令的值,默认插槽 slot,后备内容 (默认值),具名插槽,作用域插槽,案例概览,静态结构,MyTag 组件,MyTable 组件。生命周期,单页应用程序与路由,vue-router研究生命周期的意义,生命周期函数(钩子函数),组件生命周期分类,SPA - 单页应用程序,路由介绍,vue-router介绍,vue-router使用,配置路由规则,路由的封装,vue路由 - 声明式(a标签转跳)导航,vue路由 - 重定向和模式,vue路由 - 编程式(JS代码进行转跳)导航,综合练习 - 面经基础版,组件缓存 keep-alive。面经 H5 端 - Vant(上)初始化,vant,axios封装,router,主题定制-了解,登录&注册。面经 H5 端 - Vant(下)列表,详情,收藏 与 喜欢,我的(个人中心)。Day01_vuex今日学习目标(边讲边练),1.vuex介绍,2.vuex学习内容,3.vuex例子准备,vuex-store准备,5.vuex-state数据源,【vuex-mutations定义-同步修改,【vuex-mutations使用,8.vuex-actions定义-异步修改,9.vuex-actions使用,10.vuex-重构购物车-准备Store,11.vuex-重构购物车-配置项(上午结束),vuex-getters定义-计算属性,13.vuex-getters使用,14.vuex-modules定义-分模块,15.分模块-影响state取值方式,16.分模块-命名空间,扩展: 使用Devtools调试vuex数据。

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


v-model

v-model 语法糖

语法糖:v-model本质上是 value属性和input事件的一层包装

v-model的作用:提供数据的双向绑定

  • 数据发生了改变,页面会自动变 v-bind:value
  • 页面输入改变 , 数据会自动变化 v-on:input

v-model是语法糖, v-model等价于 给一个input框提供了 :value属性以及 @input事件

很显然如果每次使用input框,都需要提供value和input事件,比较麻烦,所以使用v-model

<template><div><input type="text" v-model="msg"><input type="text" :value="msg" @input="msg = $event.target.value"><input type="text" :value="car" @input="car = $event.target.value"><input type="text" v-model="car"></div>
</template>

v-model给组件使用

我们经常遇到一种场景:

  1. 父组件提供一个数据给子组件使用(父传子)
  2. 子组件又需要修改父组件传过来的这个数据,所以需要子传父把值传给父组件。

这种场景可以使用v-model进行简写。

  • 定义组件的时候,注意接收的值叫value, 子传父触发的事件叫 input

image-20210115120631003

  • 父传子给子组件传递value属性和input事件

image-20210115120702759

ref 和 $refs

利用 ref 和 $refs 可以用于获取 dom 元素, 或者组件实例

每个 vue 的组件实例上,都包含一个$refs 对象,里面存储着对应的DOM 元素或组件的引用。

1 给需要获取的 dom 元素或者组件, 添加 ref 属性

<div><div ref="box">我是div盒子</div><jack ref="jack"></jack><button @click="fn">按钮</button>
</div>

2 通过 this.$refs.xxx 获取, 拿到组件可以调用组件的方法

import Jack from './jack.vue'
export default {methods: {fn () {console.log(this.$refs.box)console.log(this.$refs.jack)this.$refs.jack.sayHi()}},components: {Jack}
}

$nextTick

需求1: 点击按钮, 切换显示输入框

<template><div><!-- 需求: 点击按钮, 切换显示输入框 --><input type="text" v-if="isShowInput"><button @click="fn" v-else>点此搜索</button></div>
</template><script>
export default {data () {return {isShowInput: false}},methods: {fn () {this.isShowInput = true}}
}
</script>

需求2: 显示输入框的同时, 要获取焦点

当文本框展示出来之后,如果希望它立即获得焦点,则可以为其添加 ref 引用,并调用原生 DOM 对象的.focus() 方法即可。

直接调用会报错, 因为 vue 是 异步dom更新的 (提升渲染效率), this.isShowInput = true 执行完时, 实际的 dom 还没渲染出来

<input ref="inp" type="text" v-if="isShowInput">fn () {this.isShowInput = truethis.$refs.inp.focus()
}

组件的 $nextTick(callback) 方法,会把 callback 回调推迟到下一个 DOM 更新周期之后执行。

通俗的理解是:等组件的DOM 刷新之后,再执行 callback 回调函数。从而能保证 callback 函数可以操作到最新的 DOM 元素。

<template><div><!-- 需求: 点击按钮, 切换显示输入框 --><input ref="inp" type="text" v-if="isShowInput"><button @click="fn" v-else>点此搜索</button></div>
</template><script>
export default {data () {return {isShowInput: false}},methods: {fn () {this.isShowInput = truethis.$nextTick(() => {this.$refs.inp.focus()})}}
}
</script>

dynamic 动态组件

动态组件的基本使用

什么是动态组件: 让多个组件使用同一个挂载点,并动态切换,这就是动态组件

<template><div><h3>动态组件的演示</h3><!-- 动态组件 => 多个组件使用同一个挂载点, 并可以动态的切换展示 --><button @click="comName = 'my-swiper'">swiper</button><button @click="comName = 'my-nav'">nav</button><!-- <my-nav></my-nav><my-swiper></my-swiper> --><component :is="comName"></component></div>
</template><script>
import MyNav from './my-nav.vue'
import MySwiper from './my-swiper.vue'
export default {data () {return {comName: 'my-nav'}},components: {MyNav,MySwiper}
}
</script>

自定义指令

自定义指令说明

除了核心功能默认内置的指令 (v-modelv-show),Vue 也允许注册自定义指令。 v-xxx

注意,代码复用和抽象的主要形式是组件。

然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

自定义指令 - 局部注册

例如需求: 当页面加载时,让元素将获得焦点 , (autofocus 在 safari 浏览器有兼容性)

<template><div><h3>自定义指令</h3><input ref="inp" type="text" v-focus></div>
</template><script>
export default {directives: {// 自定义一个局部指令focus: {inserted (el) {el.focus()}}}
}
</script>

自定义指令 - 全局注册

// 注册全局自定义指令
Vue.directive('focus', {inserted (el) {el.focus()}
})

自定义指令 - 指令的值

在绑定指令时,可以通过“等号”的形式为指令绑定具体的参数值

需求: v-color="color" 给对应的颜色, 就能改对应的字体颜色

<div v-color="color">我是内容</div>

实现:

directives: {// 自定义一个局部指令color: {// 指令所在的元素渲染的时候inserted (el, {value}) {el.style.color = value},// update指令的值改变时触发, binding.value指令的值修改触发update (el, binding) {el.style.color = binding.value}}
}

插槽

插槽(Slot)是 vue 为组件的封装者提供的能力。

允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。

默认插槽 slot

需求: 要在页面中显示一个对话框, 封装成一个组件

image-20220608080633145

通过父传子, 固然可以完成一定层面的组件的定制, 但是自定义性较差,

如果希望能够自定义组件内部的一些结构 => 就需要用到插槽

插槽作用: 用于实现组件的内容分发, 通过 slot 标签, 可以接收到写在组件标签内的内容

插槽:slot 作用:占位置

基本示例:

<my-dialog><p>请输入正确的手机号码</p>
</my-dialog>

my-dialog.vue

<template><div class="my-dialog"><div class="header"><h3>友情提示</h3></div><div class="content"><slot></slot></div><div class="footer"><button>关闭</button></div></div>
</template><script>
export default {}
</script><style lang="less" scoped>
.my-dialog {width: 400px;padding: 10px 20px;border: 3px solid #000;border-radius: 5px;margin: 10px;
}
</style>

后备内容 (默认值)

封装组件时,可以为预留的 <slot> 插槽提供后备内容(默认内容)。

如果组件的使用者没有为插槽提供任何内容,则后备内容会生效。

<template><div class="my-dialog"><div class="header"><h3>友情提示</h3></div><div class="content"><slot>这是后备内容</slot></div><div class="footer"><button>关闭</button></div></div>
</template>

具名插槽

插槽的分类:

1 默认插槽(匿名插槽)

<slot></slot> 只要没有具体分发的内容, 都会给到默认插槽

<slot name="default"></slot> 是默认插槽完整的写法 和 <slot></slot> 完全等价

2 具名插槽: 具有名字的插槽 (配置了名字), 可以实现定向分发

一旦配置了名字, 只会接收对应的内容, 不是分发给他的, 就不要

具名插槽的使用步骤

(1) 给插槽起名字

<div class="header"><slot name="header"></slot>
</div>
<div class="content"><slot>这是后备内容</slot>
</div>
<div class="footer"><slot name="footer"></slot>
</div>

(2) 需要使用 template 标签, 将内容包裹成一个整体

(3) 通过 v-slot:插槽名, 指定具体分发给谁

<my-dialog><template v-slot:header><h3>这是大标题</h3></template><template v-slot:default><p>这是内容</p></template><template v-slot:footer><button>确认</button><button>取消</button></template>
</my-dialog>

具名插槽的简写

跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。

例如 v-slot:header 可以被简写为 #header

<my-dialog><template #header><h3>这是大标题</h3></template><template #default><p>这是内容</p></template><template #footer><button>确认</button><button>取消</button></template>
</my-dialog>

作用域插槽

作用域插槽: 定义 slot 插槽的同时, 是可以传值的, 将来在分发内容时, 可以使用

  1. 给 slot 标签, 以 添加属性的方式传值
<slot name="bottom" :yes="yes" :no="no" money="100"></slot>
  1. 所有添加的属性, 都会被收集到一个对象中
{ yes: '确认', no: '取消', money: '100' }
  1. 在template中, 通过 v-slot:插槽名= "obj" 接收
<template #bottom="obj"><!-- {{ obj }} --><button>{{ obj.yes }}</button><button>{{ obj.no }}</button><button>{{ obj.money }}</button>
</template>
  1. 可以使用解构赋值简化数据的接收
<template #bottom="{ yes, no, money }"><button>{{ yes }}</button><button>{{ no }}</button><button>{{ money }}</button>
</template>

案例:商品列表

案例概览

image-20220608072329277

  • 知识:
  • $nextTick
  • 自定义指令
  • 插槽

静态结构

效果图:

image-20220610073238230

直接拷贝到App.vue即可 npm i less less-loader

<template><div class="table-case"><table class="my-table"><thead><tr><th>编号</th><th>图片</th><th>名称</th><th width="100px">标签</th></tr></thead><tbody><tr><td>101</td><td><img src=" /></td><td>梨皮朱泥三绝清代小品壶经典款紫砂壶</td><td><div class="my-tag"><!-- <inputclass="input"type="text"placeholder="输入标签"/> --><div class="text">茶具</div></div></td></tr><tr><td>101</td><td><img src=" /></td><td>梨皮朱泥三绝清代小品壶经典款紫砂壶</td><td><div class="my-tag"><inputclass="input"type="text"placeholder="输入标签"/><!-- <div class="text">{{ value }}</div> --></div></td></tr></tbody></table></div>
</template><script>
export default {name: 'TableCase',data () {return {goods: [{ id: 101, picture: ' name: '梨皮朱泥三绝清代小品壶经典款紫砂壶', tag: '茶具' },{ id: 102, picture: ' name: '全防水HABU旋钮牛皮户外徒步鞋山宁泰抗菌', tag: '男鞋' },{ id: 103, picture: ' name: '毛茸茸小熊出没,儿童羊羔绒背心73-90cm', tag: '儿童服饰' },{ id: 104, picture: ' name: '基础百搭,儿童套头针织毛衣1-9岁', tag: '儿童服饰' },]}}
}
</script><style lang="less" scoped>
.table-case {width: 1000px;margin: 50px auto;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}
}.my-table {width: 100%;border-spacing: 0;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}th {background: #f5f5f5;border-bottom: 2px solid #069;}td {border-bottom: 1px dashed #ccc;}td,th {text-align: center;padding: 10px;transition: all .5s;&.red {color: red;}}.none {height: 100px;line-height: 100px;color: #999;}
}.my-tag {cursor: pointer;.input {appearance: none;outline: none;border: 1px solid #ccc;width: 100px;height: 40px;box-sizing: border-box;padding: 10px;color: #666;&::placeholder {color: #666;}}
}
</style>

MyTag 组件

image-20220610073545654

核心需求:

  1. 双击显示输入框,并回显标签信息
  2. 失去焦点,隐藏输入框
  3. 修改标签信息,回车, 显示修改后的标签文本

组件

新建 components/MyTag.vue 文件

<template><div class="my-tag"><!-- <inputclass="input"type="text"placeholder="输入标签"/> --><div class="text">茶具</div></div>
</template><script>
export default {}
</script><style lang="less">
.my-tag {cursor: pointer;.input {appearance: none;outline: none;border: 1px solid #ccc;width: 100px;height: 40px;box-sizing: border-box;padding: 10px;color: #666;&::placeholder {color: #666;}}
}
</style>

App页面中注册使用

<template><div class="table-case"><table class="my-table">...<tbody><tr><td>101</td><td><img src=" /></td><td>梨皮朱泥三绝清代小品壶经典款紫砂壶</td><td><MyTag></MyTag></td></tr></tbody></table></div>
</template><script>
import MyTag from './components/MyTag.vue'export default {name: 'TableCase',...components: {MyTag}
}
</script>

双击 【input】显示

  1. my-tag盒子注册双击事件
<div class="my-tag" @dblclick="open">
  1. 提供数据,利用v-if控制显示隐藏
<template><div class="my-tag" @dblclick="open"><inputv-if="edit"class="input"type="text"placeholder="输入标签"/><div v-else class="text">茶具</div></div>
</template><script>
export default {data () {return {edit: false}},methods: {open () {this.edit = true}}
}
</script>

【input】获取焦点

$nextTick

    open () {this.isEdit = true // 显示 vue 是异步dom更新的this.tag = this.value // 默认的修改回显this.$nextTick(() => {this.$refs.myInp.focus()})},

自定义指令 - 自动获取焦点

<template><div class="my-tag" @dblclick="open">x`<inputv-if="edit"v-focusclass="input"type="text"placeholder="输入标签"/><div v-else class="text">茶具</div></div>
</template><script>
export default {...directives: {focus: {inserted (el) {el.focus()}}}
}
</script>

失去焦点 【input】隐藏

  1. 注册blur事件
<inputv-if="edit"v-focus@blur="close"class="input"type="text"placeholder="输入标签"
/>
  1. 控制隐藏
close () {this.edit = false
}

控制表单文本绑定

数据来自父级:

  1. 父组件App.vue, v-model 绑定数据(丢进行,还能被改回来!)
<MyTag v-model="msg"></MyTag>data () {return {...msg: '测试标签'}
},
  1. 子组件MyTag.vue接收渲染,子组件是否能直接修改数据?
<inputv-if="isEdit"v-model="value"     子组件是否能直接修改数据?class="input"type="text"placeholder="输入标签"/>
<div v-else class="text">{{ value }}</div>props: {value: String
},

不能!违背了单向数据流的规定


解决:

  • 1、div文本标签显示的,是父组件传递过来的数据 value!
  • 2、input输入框内显示和要修改的,是my-tag子组件内的自己的数据 tag
  • 3、双击时:把传入的数据value的值,同时设置给 tag;
  • 4、回车时:把子组件内部的修改后的值tag,丢出去设置给父级的value!

步骤:

  1. 父组件App.vue, v-model 绑定数据
<MyTag v-model="msg"></MyTag>data () {return {...msg: '测试标签'}
},
  1. 子组件MyTag.vue接收渲染
<div v-else class="text">{{ value }}</div>props: {value: String
},
  1. 子组件MyTag.vue提供数据,并绑定
data () {return {edit: false,tag: '标签'}
},<template><div class="my-tag" @dblclick="open"><inputv-if="edit"v-focusv-model.trim="tag"@blur="close"class="input"type="text"placeholder="输入标签"/><div v-else class="text">{{ value }}</div></div>
</template>
  1. 双击显示时回显
open () {this.edit = truethis.tag = this.value
},
  1. 回车时提交
<inputv-if="edit"v-focusv-model.trim="tag"@blur="close"@keyup.enter="handleEnter"class="input"type="text"placeholder="输入标签"
/>handleEnter () {this.edit = falseif (this.tag === '') {this.tag = '暂无'}this.$emit('input', this.tag)
}

MyTable 组件

组件

<template><table class="my-table"><thead><tr><th>编号</th><th>图片</th><th>名称</th><th width="100px">标签</th></tr></thead><tbody><tr><td>101</td><td><img src=" /></td><td>梨皮朱泥三绝清代小品壶经典款紫砂壶</td><td>标签</td></tr></tbody></table>
</template><script>
export default {}
</script><style lang="less" scoped>
.my-table {width: 100%;border-spacing: 0;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}th {background: #f5f5f5;border-bottom: 2px solid #069;}td {border-bottom: 1px dashed #ccc;}td,th {text-align: center;padding: 10px;transition: all .5s;&.red {color: red;}}.none {height: 100px;line-height: 100px;color: #999;}
}
</style>

循环渲染

父组件:数据在app.vue内部

<MyTable :data="goods"></MyTable>

子组件

<template><table class="my-table"><thead><tr><th>编号</th><th>图片</th><th>名称</th><th width="100px">标签</th></tr></thead><tbody><tr v-for="item in data" :key="item.id"><td>{{ item.id }}</td><td><img :src="item.picture" /></td><td>{{ item.name }}</td><td>{{ item.tag }}</td></tr></tbody></table>
</template><script>
export default {name: 'MyTable',props: {data: {type: Array,default: [],},},
}
</script>

插槽处理

  • 方便使用者自定义表格的标题, 且内容部分要和标题部分对应, 所以也应该定义成插槽
<template><table class="my-table"><thead><tr><slot name="th"></slot></tr></thead><tbody><tr v-for="(item, index) in list" :key="item.id"><slot name="td" :index="index" :item="item"></slot></tr></tbody></table>
</template>

传入结构

<template><div class="table-case"><MyTable :list="goods"><template #th><th>编号</th><th>名称</th><th width="100px">标签</th><th>图片</th></template><template #td="{ index, item }"><td>{{ index + 1 }}</td><td>{{ item.name }}</td><td><!-- 应该是允许子组件的直接更新标签内容,这个标签内容没有什么大的问题 --><!-- :value 和 @input  --><MyTag v-model="item.tag"></MyTag></td><td><img :src="item.picture" /></td></template></MyTable></div>
</template><script>
import MyTag from './components/MyTag.vue'
import MyTable from './components/MyTable.vue'export default {name: 'TableCase',data () {return {goods: [{ id: 101, picture: ' name: '梨皮朱泥三绝清代小品壶经典款紫砂壶', tag: '茶具' },{ id: 102, picture: ' name: '全防水HABU旋钮牛皮户外徒步鞋山宁泰抗菌', tag: '男鞋' },{ id: 103, picture: ' name: '毛茸茸小熊出没,儿童羊羔绒背心73-90cm', tag: '儿童服饰' },{ id: 104, picture: ' name: '基础百搭,儿童套头针织毛衣1-9岁', tag: '儿童服饰' },],}},components: {MyTag,MyTable}
}
</script>

未完待续, 同学们请等待下一期

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

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

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

相关文章

更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解

元编程&#xff08;Metaprogramming&#xff09;指在程序运行时操作或者创建程序的一种编程技术&#xff0c;简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成&#xff0c;使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…

【Python系列】将生成的 JSON 数据写入 JSON 文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

面试经典-Spring篇

1、解释Spring框架中bean的生命周期 实例化 通过反射去推断构造函数进行实例化 实例工厂、静态工厂 属性赋值 解析自动装配&#xff08;byname、bytype、 constractor、 Autowired&#xff09; 循环依赖 初始化 调用XXXAware回调方法&#xff08;BeanNameAware、BeanFactoryAw…

移动Web学习05-移动端适配Less预处理器

7、移动端适配 7.1、什么是适配&#xff1f; 简单理解就是、同一个网页&#xff0c;在不同屏幕分辨率的设备下、显示还是一样的&#xff0c;你可以理解为、网页当中的图片&#xff0c;盒子之间的距离、文字的大小、随着屏幕分辨率的变化而变化 前面我们学习了flex布局的方式…

Yalmip使用教程(7)-求解器的参数设置

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中常用的求解器设置选项。 1.求解器的基本设置 使用sdpsettings函数可以对求解的相关参数进行设置。最常用的设置…

Java学习day6-集合

集合指一组用于储存和操作数据的类和接口&#xff0c;提供各种数据结构和算法&#xff0c;以在程序中高效地管理和操作数据 特点&#xff1a;与数组相比&#xff0c;集合可以自动扩容&#xff0c;只需向其中添加元素即可&#xff08;与Cvector类似&#xff09;&#xff1b;数组…

软考之零碎片段记录(七)+复习巩固(二)

一、上新 1. 有向图 从顶点A到顶点B的边&#xff0c;不等于从B到A的边。 2. 广度优先 遍历开始节点&#xff08;第一层&#xff09;的邻节点&#xff08;从左至右顺序&#xff09;&#xff0c;邻接点设为第二层根据1中遍历邻接点从左往右的顺序遍历。 bilibili视频《广度优…

《C++程序设计》阅读笔记【5-引用】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 引用1.1 概念1.2 和引用相关的操作1.2.1 什么能被引用 1.3 用引用传…

WebKit结构揭秘:探秘网页渲染的魔法之源

一、WebKit之心&#xff1a;渲染引擎的魔力 WebKit的渲染引擎是其核心所在&#xff0c;它犹如一位技艺高超的魔法师&#xff0c;将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码&#xff0c;绘制页面&#xff0c;让网页内容跃然屏上&#xff0c;展现出无尽…

ROS 2边学边练(15)-- 写一个简单的服务(C++)

前言 此篇我们即将编写一个简单的服务&#xff08;service&#xff09;通信例子&#xff0c;客户端节点向服务端节点发出请求&#xff08;.srv文件中规定了通信的数据结构格式&#xff09;&#xff0c;服务端节点收到请求后将结果回复给客户端节点&#xff0c;一问一答&#xf…

Unity类银河恶魔城学习记录12-4 p126 Item Tooltip源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using System.Collections; using System.Collections.Generic; usi…

【面经】interrupt()、interrupted()和isInterrupted()的区别与使用

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;面经 ⛺️稳中求进&#xff0c;晒太阳 interrupt方法 如果打断线程正在sleep&#xff0c;wait&#xff0c;join会导致被打断的线程抛出InterruptedException&#xff0c;并清除打断标记。如…

Redis的配置文件详解

单位&#xff1a;Redis配置对大小写不敏感&#xff01; 注意这里&#xff1a;任何写法都可&#xff0c;不区分大小写。 units are case insensitive so 1GB 1Gb 1gB are all the same.包含&#xff1a;搭建Redis集群时&#xff0c;可以使用includes包含其他配置文件网络&…

关于 elf loader 的编写

可以使用如下命令观看 elf 文件的信息 readelf -a build/ramdisk.img | vim -在编写 elf loader 的时候&#xff0c;实际上只有下图这一部分 “Program Headers” 是有用的 凡是类型为 “LOAD” 的就是需要加载进内存的部分 所以&#xff0c;只要把这些部分加载进内存里&…

数据库不用mmap

你确定你想用 MMAP 实现数据库么&#xff1f;_哔哩哔哩_bilibili MMAP 的随机读与顺序读的性能表现不好&#xff0c;以及对于写主要是不可控的刷入时机以及代码冗余&#xff0c;所以 MMAP 不适合在数据库中使用。 mmap是posix系统调用&#xff0c;它提供由操作系统管理内存映…

(C)1008 数组元素循环右移问题

1008 数组元素循环右移问题&#xff1a; 问题描述 输入样例&#xff1a; 6 2 1 2 3 4 5 6 输出样例&#xff1a; 5 6 1 2 3 4 解决方案&#xff1a; #include<stdio.h> #include<string.h> #include<math.h> int main(){int n,k,flag,y,x,final;int a[10000…

Flutter Boost 3

社区的 issue 没有收敛的趋势。 设计过于复杂&#xff0c;概念太多。这让一个新手看 FlutterBoost 的代码很吃力。 这些问题促使我们重新梳理设计&#xff0c;为了彻底解决这些顽固的问题&#xff0c;我们做一次大升级&#xff0c;我们把这次升级命名为 FlutterBoost 3.0&am…

合理早餐选择,稳定糖尿病血糖。

对于糖尿病患者来说&#xff0c;饮食管理是治疗的重要一环。不合理的早餐选择会导致血糖的波动。很多糖尿病朋友按时吃药&#xff0c;但是血糖就是稳定不住&#xff0c;之前看过一个例子&#xff0c;北京崇文门医院朱学敏主任接诊过一个患者&#xff0c;那个患者按时吃药&#…

LaTeX 空格与换行

任意多个空格与一个空格的功能相同。只有字符后面的空格是有效的&#xff0c;每行最前面的空格被忽略。单个换行被视作一个空格&#xff0c;连续两个换行表示分段。~被称作一种不可打断的空格&#xff0c;排版系统不会在这种空格之间换行。西文的逗号、句号和分号等标点后面应该…

Java | Leetcode Java题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; class Solution {public int myAtoi(String str) {Automaton automaton new Automaton();int length str.length();for (int i 0; i < length; i) {automaton.get(str.charAt(i));}return (int) (automaton.sign * automaton.ans);} …