前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言之数组/Slice篇

Go语言之数组/Slice篇

作者头像
灰子学技术
发布2023-10-30 15:23:03
1040
发布2023-10-30 15:23:03
举报
文章被收录于专栏:灰子学技术灰子学技术

一、数组的语法介绍

Go中的数组与C++中的数组含义并无不同,表示的都是具有相同唯一数据类型的一组已经编号并且长度固定的数组项序列。

```

var varName [SIZE]type // 备注:该格式是声明格式,变量名 + 数组大小 + 数据类型

```

数组初始化:

数组的初始化基本上是以下例子中的几种格式

代码语言:javascript
复制
package main
import (
"fmt"
)
func main() {
        var name0s [2]string = [2]string{"hello","shanghai"}
        var names = [...]string{"hello", "world"}
        var name1s = [5]string{"hello", "the", "world"}
        name2s := []string{"hello","go","language"}
        fmt.Println(name0s, names, name1s, name2s)
        return
}


output:


[hello shanghai] [hello world] [hello the world ] [hello go language]

二、Slice的语法介绍

Go语言里面提到数组,就避不开slice,在介绍slice之前,我们需要先看下slice与数组之间的关系。

1.slice是数组的抽象。

2.数组的长度是固定的,但是slice的长度是可变的。

Go语言中的slice与C++中的vector是很类似的。

Go中的slice初始化有下面几种方式:

代码语言:javascript
复制
var silceName []type
var sliceName []type = make([]type, len)
silceName := make([]type, len)
sliceName := make([]type, len, capactity) // len表示的是slice的长度,capacity表示的是slice的容量大小,也就是说,当len<capacity的时候,slice不会重新申请内存空间,len>capacity   的时候,会重新申请一个内存空间。
slice := []int{1,2,3} // 直接将slice初始化,其中slice[0]=1,slice[0]=2,slice[0]=3,len = capacity = 3

例子如下:

Output:

在使用slice的时候,如果采用下标的方式,一旦超过了capacity的话,会提示 越界错误。

append的使用会导致,slice的append扩充,扩充规则为:

1.如果新的大小是当前大小的2倍以上,则大小增长为新大小

2.否则循环一下操作:如果当前大小小于1024,按每次2倍增长,否则每次按当前大小的 1/4 增长。直达增长的大小超过或等于新大小。

例子为:

备注:在使用slice的时候,往往会因为slice的capacity的大小不确定,而采用“下标”的方式添加,此种方式存在数组越界的风险,但是采用append可以自动扩展capacity的大小,所以笔者建议给slice新增元素的时候,尽量采用append的方式。

三、C++的vector的介绍

1.是封装动态数组的顺序容器。

2.vector 的存储是自动管理的,按需扩张收缩。vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长。vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。分配的内存总量可用 capacity() 函数查询。

3.标准库提供 std::vector 对类型 bool 的特化,它可能为空间效率优化。vector<bool>节省空间的动态 bitset

常用函数如下所示:

参数:https://zh.cppreference.com/w/cpp/container/vector

参考:https://zh.cppreference.com/w/cpp/container/vector

灰子作于二零一九年八月十一日。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档