动态数组

来自GSXAB的知识库
动态数组
术语名称 动态数组
英语名称 dynamic array
别名 变长数组, resizable array, growable array, array list

动态数组(dynamic array)或变长数组(resizable array)指逻辑结构为线性表、存储结构为数组,且数组长度可变的数据结构。

编程语言中,动态数组可能被实现为基本的数组类型。动态数组通常涉及内存的动态分配、移动和动态释放,因此被称为动态数组。本质上,动态数组和静态数组的区分是其是否涉及动态内存操作。即使长度不进行变更,如果数组长度编译时未知,涉及运行期重新分配,也视为不太典型的动态数组;相反,尽管很难举出实例,编译时预设最大长度,运行期修改其使用范围,则可以视为不太典型的静态数组。

语言实例

动态数组
语言 版本/库 对应内容 说明
C C89 包括三种:
  1. 通过动态分配和指针转换实现,如malloc,calloc,realloc系列函数
  2. 变长数组(variable-length array, VLA)语法(GCC 扩展,C99 采纳),不要求编译期确定长度的数组,长度可以接受整形表达式,运行时动态分配
  3. 柔性数组(GCC 扩展,C99 采纳),结构体最后一个成员是长度为 0 的数组,运行时加上数组一起分配内存,并通过这个指向成员后的数组基址索引元素
标准库及语法规则
C++ C++98 std::vector STL


实现实例

libcxx: libc/src/__support/CPP/array.h

libstdc++: libstdc++-v3/include/std/array

GSSDS 定义

GSSDS: array/include/sds/dynamic_array/dynamic_array.h

特殊操作算法

由于数组存储方式有长度和索引,能够快速确认每个元素的位置,其获取可以在常数时间内完成,但是插入和删除则需要较复杂的操作,见数组的插入、删除


模板:数据结构