Go语言之数组/Slice篇

作者: 灰常出色 | 来源:发表于2019-08-15 22:02 被阅读14次

转自“灰子学技术”公众号

一、数组的语法介绍

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

```

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

```

数组初始化:

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

```

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初始化有下面几种方式:

```

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

灰子学技术公众号:

Go语言之数组/Slice篇

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

相关文章

  • Go语言之数组/Slice篇

    转自“灰子学技术”公众号 一、数组的语法介绍 Go中的数组与C++中的数组含义并无不同,表示的都是具有相同唯一数据...

  • Go slice那些事

    今晚闲来无事,总结一下Go的slice slice是什么slice在Go中的原型?slice类似数组,是一种定长的...

  • 深入理解 Go Slice

    原文地址:深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特...

  • Golang之数组和切片

    引用 数组、字符串和切片 Go数组中的索引问题 深入解析 Go 中 Slice 底层实现 Golang 入门 : ...

  • Go-数组与slice

    本文将讲解Go语言中的数组与slice。之前看到网上好多 《深入理解slice》、《深入解析slice》... 的...

  • 七、Go切片

    七、Go语言切片(Slice) Go 语言切片是对数组的抽象。 Go 数组的长度不可改变,在特定场景中这样的集合就...

  • golang数据类型

    Go语言中有四种复合数据类型:数组,slice,map,结构体 数组和结构体都是聚合类型,长度固定。而slice和...

  • Go语言之切片(Slice)

    一:初识 定义切片var 切片名 [] type切片不需要说明长度,或使用make()函数来创建切片 make...

  • go之slice

    slice中文切片的意思,是go独有的类型,底层是数组,可以很方便的进行截取,也支持扩容、拷贝操作 slice 创...

  • go 数组和切片slice那些事儿

    目录 数组数组概念数组的初始化 切片slice概念slice创建slice追加slice拼接问题slice作为函数...

网友评论

    本文标题:Go语言之数组/Slice篇

    本文链接:https://www.haomeiwen.com/subject/mdfbnqtx.html