标签:ola 支持 因此 作用 pen 求和 添加 vector poi
array和slice功能非常像, 容易搞混. 本文比较下array和slice的区别. 然后黑一下.
go版本: go version go1.13.3 linux/amd64
类型相同, 长度固定的数据集合. 长度无法修改
类型为: [len]T (len不能省略)
值是一段连续的内存区域和一些额外属性
属性示例:
要点:
可以看作是内存的视图,展示内存的一段区域
类型为: []T
值是一个指向内存的数据结构, 类似指向数组的指针
属性示例:
要点:
append可能会导致cap不足,需要重新分配内存. 此时需要修改slice指向的内存地址,len,cap. 但是由于append没法修改原slice变量的属性, 这就出现了矛盾: 需要修改原输入参数,但有不能产生副作用.
golang的解决方法是强制规定append的返回值必须赋值给slice.算是解决了忘记赋值的问题, 但是太丑陋了. 给slice提供一个append方法不是更简单直接吗?
多个slice可以指向同一块内存数据. 对其中一个slice(假设为A)做append后, A可能不再和其他slice共享一块内存数据
这种可能性受如下因素影响:
我觉得, 作为一个slice, 就应该保持内心的纯粹, 不能贪婪. slice应该只做视图, 不应该有改变底层大小的能力. slice应该添加只读和可写的功能. 去掉append方法. 假设按照这种方法, 看下会有哪些改进.
而变长数组就交给vector库就可以了. 何必通过编译器做这些库应该做的那? 哦, golang不支持泛型. 难道是由于不支持泛型, 才搞出这种设计的?
标签:ola 支持 因此 作用 pen 求和 添加 vector poi
原文地址:https://www.cnblogs.com/shouzhuo/p/12076822.html