赞
踩
很多语言都有切片,切片严格来说是一种概念,并不是一种明确的数据结构。树、哈希表是一种明确的数据结构。
切片不管怎么实现,实际上是引用数组一个片段,要么是整个数组,要么是局部数组。引用局部的话必须有长度、容量,切片需要模拟动态数组特征必然存在扩容问题,扩容涉及到底层数组重新分配,重新分配是数组的行为,切片只不过调用数组,重新创建数组把内容拷过去,这只是一种实现方式并不是切片本身有这种能力,是对概念的一种模拟化。
切片是基于数组延伸的一种概念,在不同的语言有不同实现方式。不管它怎么实现,是否支持扩容,切片基本上可以确定它代表一种开闭区间,起始开始到截止地址的终止。
Go语言的标准库没有使用数组而在使用切片,为什么不把数组这个概念取消掉。因为数组的传值类型很麻烦,用切片来模拟这种行为。用切片来形成一种所谓安全型C语言数组,因为c语言数组只能传起止地址不能传长度。切片内部结构有长度一说,所以说它是有边界值检查的数组。
很显然数组和切片代表两种不同的概念,不管底层怎么实现,切片存在追加行为,数组没有。不管切片底层基于什么实现和想表达的一种抽象概念是两回事,这显然代表两种编程的含义。
用切片所代表的行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。