数组是多个有关联的元素组织在一起的数据结构,可以通过下标直接访问对应元素。
C++
STL中有丰富的容器类型和常用的函数,一般用vector来作为数组。
初始化和访问
int n = 5;
vector<int> arr; // 只声明变量名
vector<int> arr(5); // 声明变量名和长度
vector<int> arr(5, 0); // 声明变量名和长度,并全部初始化为0
vector<int> arr(n, 0); // 长度也可以用变量
vector<int> arr2(arr); // 用另一个vector来初始化
vector<int> arr = {1,2,3,4,5};
vector<int> arr2(arr.begin()+2, arr.begin()+4); // 用另一个vector的部分元素来初始化
int arr[5]= {1,2,3,4,5};
vector<int> arr2(arr.begin()+2, arr.begin()+4); // 用数组的部分元素来初始化
int a = arr[2]; // 访问元素
arr[2] = 2; // 改变元素的值
int arrLen = arr.size();// 获取vector长度
增加元素
vector<int> arr(5, 0);
arr.push_back(5); // 在末尾增加元素5
arr.insert(arr.begin()+2,5); // 在下标为2的位置插入元素5
arr.insert(arr.begin()+2,3,5); // 从下标2开始插入3个5
删除元素
vector<int> arr(5, 0);
arr.pop_back(); // 删除尾部元素
arr.erase(arr.begin()+2); // 删除下标为2的元素
arr.erase(arr.begin()+2, arr.begin()+4); // 删除下标从2到4(不含)的元素
arr.clear();
修改元素
vector<int> arr(5, 0);
arr[2] = 2; // 修改单个元素
// 没有直接修改多个元素的函数
// 可以用如下两种方法实现
// 方法一:通过遍历来修改
int a[3] = {1,2,3};
for (int i=0;i<3;i++)
arr[2+i] = a[i]; // 将arr中下标从2开始的3个元素改为1,2,3
// 方法二:先删除再插入
arr.erase(arr.begin()+2,arr.begin()+4);
arr.insert(arr.begin()+2, 2, 5); // 将下标从2到4(不含)的元素都改为5
for (auto a: arr)
cout<<a<<' ';
查找元素
vector<int> arr = {1,3,5,7,9};
// 在arr.begin()到arr.end()之间查找5,返回迭代器
vector<int>::iterator it = find(arr.begin(), arr.end(), 5);
int pos = it - arr.begin(); // 可以通过与arr.begin()作差得到下标位置
其他
vector<int> arr = {5,1,7,3,9};
// 对arr中所有元素排序
sort(arr.begin(),arr.end());
// 对arr中下标从1到4(不含)的元素排序
sort(arr.begin()+1,arr.begin()+4);
// 翻转arr中从下标2到结尾的元素
reverse(arr.begin() + 2, arr.end());
// 对arr中的所有元素求和,需要#include <numeric>
int sum = accumulate(arr.begin(),arr.end(),0);
Java
类比C++的vector,Java中可以用ArrayList。
需要:import java.util.ArrayList;
初始化和访问
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(1); // 添加元素
arr.add(2);
arr.add(3);
int a = arr.get(1); // 获取下标为1的元素值
arr.set(1,10); // 设置下标为1的元素的值为10
int arrLen = arr.size(); // 获取长度
增加元素
ArrayList<Integer> arr = new ArrayList<Integer>();
ArrayList<Integer> arr2 = new ArrayList<Integer>();
arr.add(1); // 添加单个元素
arr.add(2);
arr.add(3);
arr2.add(7);
arr2.add(8);
arr2.add(9);
arr.addAll(arr2); // 将arr2中所有元素添加到arr末尾
arr.addAll(1, arr2); // 将arr2中所有元素插入到arr中下标为1的位置
删除元素
ArrayList<Integer> arr = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++)
arr.add(i); // 先添加1~10到arr中
arr.remove(3); // 删除下标为3的元素
arr.clear(); // 清空arr
// 按条件删除,删除arr中所有的偶数
arr.removeIf(e -> e%2 == 0);
// ArrayList没有直接删除多个元素的函数
// 可以通过循环,多次remove来实现
// 下面3行代码实现删除arr下标从3到5的元素
int pos = 3;
for (int i = 0; i < 3; i++)
arr.remove(pos); // 删除了下标为3的元素,后面的元素下标会减1,所以还是删除下标为3的元素
// 或者从后往前删除
for (int i = 5; i > 2; i--)
arr.remove(i);
// 切忌用下面的代码,因为下标会变
for (int i = 3; i <= 5; i++)
arr.remove(i);
修改元素
for (int i = 1; i <= 10; i++)
arr.add(i); // 先添加1~10到arr中
arr.set(3, 0); // 修改下标为3的元素的值为0
// 如果要修改多个元素的值,可以用循环来实现
查找元素
// 判断arr中是否有0,有则返回true,否则返回false
boolean flag = arr.contains(0);
// 获取5在arr中的下标,如果不存在则返回-1
int pos = arr.indexOf(5);
其他
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(5);
arr.add(3);
arr.add(7);
// 判断arr是否为空
boolean flag = arr.isEmpty();
// 将arr中的元素升序排列,需要import java.util.Comparator;
arr.sort(Comparator.naturalOrder());
// arr中的元素降序排列
arr.sort(Comparator.reverseOrder());
Python
初始化和访问
n = 5
arr = [0]*5 # 初始化方法一
arr2 = [0]*n # 长度也可以是变量
arr3 = [0 for _ in range(n)] # 初始化方法二
arr4 = [1, 2, 3, 4, 5] # 初始化方法三
arr5 = [1,"abc",[2,3,4]] # 列表可以包含多种类型的元素
a = arr[2] # 访问列表元素
arr[2] = 2 # 改变列表元素的值
arrLen = len(arr1) # 获取长度
增加元素
arr = [0]*5
arr.append(5) # 在末尾增加元素5
arr.insert(2,5) # 在位置2插入元素5
删除元素
arr = [1,3,5,7,9]
del arr[2] # 按下标删除,无返回值
ret = arr.pop(2) # 按下标删除,返回被删除的元素的值
arr.remove(6) # 按值删除,无返回值。如果没有会报错,如果有多个,只删除第一个
arr.clear() # 清空arr,相当于:arr=[]
修改元素
arr = [1,3,5,7,9]
arr = [2,4,6] # 整个列表重新赋值
arr[1] = 2 # 修改列表中某个元素的值
arr[1:4] = [2,4,6] # 修改连续多个元素的值
查找元素
arr = [1,3,5]
pos = arr.index(3) # 返回元素3的位置,如果不存在则报错
其他
arr = [5,1,7,3,9]
s = sum(arr) # 求和
arr.sort() # 排序,直接改变原数组
arr2 = sorted(arr) # 排序,原数组不变,返回排序后的数组
arr.reverse() # 翻转原数组
arr3 = list(reversed(arr)) # reversed翻转数组,不改变原数组,返回迭代器,可以再用list()转为数组