数组类(C++的vector、Java的ArrayList、Python的list)

文章详细介绍了C++中的vector,Java中的ArrayList以及Python中列表的初始化、访问、增加、删除、修改、查找元素等操作,包括标准模板库(STL)在C++中的使用和Java中按条件删除元素的方法。
摘要由CSDN通过智能技术生成


数组是多个有关联的元素组织在一起的数据结构,可以通过下标直接访问对应元素。

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()转为数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值