切片的low high max

news/2025/2/27 11:49:27/文章来源:https://www.cnblogs.com/maidongdong/p/18740658

如何理解下面代码的low,high,max
s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
// low:5, high:8, max:10
s1 := s[5:8]
// low:5, high:8, max:8
s2 := s[5:8:8]

// len = high - low
// cap = max - low
fmt.Printf("s1: %v,len: %v,cap: %v\n", s1, len(s1), cap(s1))
fmt.Printf("s2: %v,len: %v,cap: %v\n", s2, len(s2), cap(s2))

让我帮你解析这段 Go 语言代码中关于切片(slice)的 lowhighmax 的含义,以及它们如何影响切片的长度(len)和容量(cap)。

代码背景

在 Go 中,切片是从底层数组中截取的一部分。切片的定义方式是 s[low:high]s[low:high:max]

  • low:切片的起始索引(包含)。
  • high:切片的结束索引(不包含)。
  • max:切片的最大容量边界(不包含),决定了切片可以扩展到的最大范围。

切片的两个重要属性:

  • 长度(len:当前切片包含的元素个数,计算公式为 high - low
  • 容量(cap:切片从 low 开始到 max(或底层数组末尾)的元素个数,计算公式为 max - low

如果没有显式指定 max,则 max 默认等于底层数组的长度。


分析代码

原始数组:s := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},长度为 10。

1. s1 := s[5:8]

  • 语法s[low:high],没有指定 max
  • 参数
    • low = 5:从索引 5(元素 5)开始。
    • high = 8:到索引 8(元素 8)结束,不包含索引 8。
    • max:未指定,默认等于底层数组的长度,即 10。
  • 结果
    • 切片 s1 的元素:[5, 6, 7](从索引 5 到 7)。
    • 长度(len)= high - low = 8 - 5 = 3
    • 容量(cap)= max - low = 10 - 5 = 5
  • 输出s1: [5 6 7], len: 3, cap: 5

2. s2 := s[5:8:8]

  • 语法s[low:high:max],显式指定了 max
  • 参数
    • low = 5:从索引 5(元素 5)开始。
    • high = 8:到索引 8(元素 8)结束,不包含索引 8。
    • max = 8:容量边界为索引 8。
  • 结果
    • 切片 s2 的元素:[5, 6, 7](从索引 5 到 7)。
    • 长度(len)= high - low = 8 - 5 = 3
    • 容量(cap)= max - low = 8 - 5 = 3
  • 输出s2: [5 6 7], len: 3, cap: 3

lowhighmax 的含义

  1. low

    • 表示切片的起始位置(包含该索引的元素)。
    • 在两个例子中,low = 5,所以切片都从元素 5 开始。
  2. high

    • 表示切片的结束位置(不包含该索引的元素)。
    • 在两个例子中,high = 8,所以切片包含到索引 7 的元素(即 7),不包含索引 8 的元素 8
  3. max

    • 表示切片容量(cap)的上限,决定了切片可以扩展到的最大范围。
    • s1 中,max 未指定,默认是数组长度 10,所以容量是 10 - 5 = 5
    • s2 中,max = 8,显式限制了容量,所以容量是 8 - 5 = 3

长度和容量的区别

  • 长度(len:由 high - low 决定,表示当前切片中实际包含的元素个数。
  • 容量(cap:由 max - low 决定,表示切片从 low 开始到 max 的潜在空间大小。如果后续通过 append 操作扩展切片,容量限制了它最多能扩展到哪里。

示例解释

  • s1 的容量是 5,意味着它还可以扩展到原始数组的末尾(索引 9),可以追加元素 [8, 9]
  • s2 的容量是 3,意味着它只能容纳当前 3 个元素 [5, 6, 7],无法再扩展,因为 max 被限制为 8。

总结

  • s1s[5:8]low = 5high = 8max = 10(默认),结果是 [5 6 7]len = 3cap = 5
  • s2s[5:8:8]low = 5high = 8max = 8,结果是 [5 6 7]len = 3cap = 3
  • lowhighmax 的作用
    • low 决定起点。
    • high 决定当前元素范围(长度)。
    • max 决定潜在空间(容量)。

希望这个解释清楚地回答了你的问题!如果还有疑问,随时问我。

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

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

相关文章

Redis复习-网络模型

用户空间和内核空间 任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互。 为了避免用户应用导致冲突甚至内核崩溃,用户应用与内核是分离的: 1.进程的寻址空间会划分为两部分:内核空间、用户空间 2.用户空间只能执行受限的命令(Ring3),而且…

2026-02-27 把本地项目添加到新建的git仓库

一:检查本地项目中是否存在git仓库git status 没有,好!进入第二步👇(有?直接git add git commit -m xxx git push,聊天end) 二:初始化仓库git init 三:创建一个远程仓库地址(如有可略) 四:关联远程仓库git remote add origin 远程仓库 五:推送git push一般直接执…

No.21 CSS--弹性盒子模型(flex box)

一、定义弹性盒子是 CSS3 的一种新的布局模式。 CSS3 弹性盒是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。 引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。二、CSS3弹性盒内容…

从零开始的云上建筑师速成班:用ROS架构编辑器搭个服务器小屋

云上建筑师速成秘籍:用阿里云ROS架构编辑器像搭乐高一样玩转服务器!零代码拖拽资源+配置指南,从部署到拆家一条龙服务~前情提要:你的云上建筑师执照 想成为云架构师?不需要考清华MIT,只需要: ✅ 一个阿里云账号(注册地址已备好,请自取) ✅ 完成实名认证(就像进游乐园…

第02章 JDBC的新增修改删除

JDBC编程六步 JDBC编程的步骤是很固定的,通常包含以下六步:第一步:注册驱动作用一:将 JDBC 驱动程序从硬盘上的文件系统中加载到内存中。 作用二:使得 DriverManager 可以通过一个统一的接口来管理该驱动程序的所有连接操作。第二步:获取数据库连接获取java.sql.Connecti…

第01章 JDBC概述

什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。‍ JDBC原理 早期SUN公司的天才们想编写一套可以连接天下所有数据库的AP…

数组模拟单链表

题目代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 100010; int head, idx, e[N], ne[N]; // 两个值,两个数组// head:第一个节点的下标(表示头结点的下标) // idx:已经存储了几个数(到了第几个数…

ES-8.17.2版本集群搭建

前提工作准备  Linux 3台 16GB运行内存 8核 50GB磁盘  JDK17 环境配置  elasticsearch-8.17.2-linux-x86_64.tar.gz 安装包2.集群规划  在 ES 集群中,不同节点可承担不同角色: **主节点(Master Node)**:负责集群管理、节点选举、索引元数据管理。建议至少配置 3 个…

第9章 shell编程

Linux系统结构 Linux操作系统是一种开放源代码的类UNIX操作系统,它的结构分为内核、Shell和应用程序三个层次。内核层内核是Linux系统的核心部分,它负责管理系统各种硬件设备、文件系统、内存管理和进程管理等核心任务。Linux内核设计了良好的模块化结构,可以动态地加载和卸…

第2章 磁盘与文件管理

磁盘管理 windows和Linux磁盘管理的区别 windows资源管理方式系统一般安装在C盘 C盘下的"Windows"目录是操作系统的核心 C盘下的"Program Files"目录下安装软件 C盘下的"用户"目录是所有的用户,包括超级管理员也在其中 windows操作系统分为C盘、…

第3章 系统命令

系统当前时间 date命令:切换用户 su 用户名sudo 命令:表示使用超级管理员身份执行该命令,如果你当前不是管理员,希望以管理员身份执行某个命令时,使用sudo,需要输入超级管理员的密码: ​​ echo命令 输出字符串 echo "Hello, world!"这将会输出 Hello, world!…

https://avoid.overfit.cn/post/bad10ed894bd43c086e3ef9de7478bea

特征选择作为机器学习工作流程中的关键环节,对模型性能具有决定性影响。Featurewiz是一个功能强大的特征选择库,具备以下核心能力:高度自动化的特征选择,仅需少量代码即可完成。 全面的特征工程功能,不仅能够选择特征,还能生成数百个衍生特征并自动筛选最优特征组合。 实…