This commit is contained in:
krahets
2023-08-20 13:37:08 +08:00
parent 2e27ad1680
commit 44a8568356
32 changed files with 140 additions and 130 deletions

View File

@@ -12,7 +12,7 @@ comments: true
## 4.1.1   数组常用操作
### 初始化数组
### 1.   初始化数组
我们可以根据需求选用数组的两种初始化方式:无初始值、给定初始值。在未指定初始值的情况下,大多数编程语言会将数组元素初始化为 $0$ 。
@@ -118,7 +118,7 @@ comments: true
let nums: Vec<i32> = vec![1, 3, 2, 5, 4];
```
### 访问元素
### 2. &nbsp; 访问元素
数组元素被存储在连续的内存空间中,这意味着计算数组元素的内存地址非常容易。给定数组内存地址(即首元素内存地址)和某个元素的索引,我们可以使用以下公式计算得到该元素的内存地址,从而直接访问此元素。
@@ -291,7 +291,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
}
```
### 插入元素
### 3. &nbsp; 插入元素
数组元素在内存中是“紧挨着的”,它们之间没有空间再存放任何数据。这意味着如果想要在数组中间插入一个元素,则需要将该元素之后的所有元素都向后移动一位,之后再把元素赋值给该索引。
@@ -468,7 +468,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
}
```
### 删除元素
### 4. &nbsp; 删除元素
同理,如果我们想要删除索引 $i$ 处的元素,则需要把索引 $i$ 之后的元素都向前移动一位。
@@ -629,7 +629,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
- **丢失元素**:由于数组的长度不可变,因此在插入元素后,超出数组长度范围的元素会丢失。
- **内存浪费**:我们可以初始化一个比较长的数组,只用前面一部分,这样在插入数据时,丢失的末尾元素都是“无意义”的,但这样做也会造成部分内存空间的浪费。
### 遍历数组
### 5. &nbsp; 遍历数组
在大多数编程语言中,我们既可以通过索引遍历数组,也可以直接遍历获取数组中的每个元素。
@@ -836,7 +836,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
}
```
### 查找元素
### 6. &nbsp; 查找元素
在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。
@@ -999,7 +999,7 @@ elementAddr = firtstElementAddr + elementLength * elementIndex
}
```
### 扩容数组
### 7. &nbsp; 扩容数组
在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。因此在大多数编程语言中,**数组的长度是不可变的**。