动态数组vector详解(Java和C++)
1.概念描述:
vector名为动态数组
有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组很可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度可以根据我们需要动态改变。动态数组的实现也不难,因为在C++和Java里面已经写好了标准模板库(STL)。
C++中动态数组写作vector,Java中写作ArrayList,C语言中没有标准库(STL),所以在竞赛中尽量使用C++和Java.
2.怎么定义
C++中vector的实现在一个<vector>头文件中,在代码开头引入这个头文件。
如:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
return 0;
}
Java中ArrayList在java.util.ArrayList包里实现。
如:
import java.util.ArrayList;
public class ArrayListTest{
public static void main(String[] args){
}
}
3.怎么构造
C++中直接构造一个vector的语句为:vector.这样定义了一个名为vec的储存T类型数据的动态数组。其中T是我们数组要储存的数据类型,可以是int、double、或者其他自定义的数据类型等等。初始的时候vec是空的。
Java通过ArrayList<T> list = new ArrayList<T>()构造一个储存T类型数据的ArrayList对象。
4.插入元素
C++中通过push_back()方法在数组最后面插入一个新的元素。
代码:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec; //定义一个动态数组vec
vec.push_back(1); //插入元素1
vec.push_back(2); //插入元素2
return 0;
}
Java中通过add()方法在数组最后插入一个新的元素。
import java.util.ArrayList;
public class ArrayListTest{
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<Integer>();//定义list动态数组
list.add(1); //插入元素1
list.add(2);
}
}
5.获取动态数组长度以及访问元素
C++中通过size()方法获取vector的长度,通过[]操作直接访问vector中的元素,这一点和数组是一样的。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
for(int i = 0;i<vec.size();i++){
cout<<vec[i]<<" ";
}
return 0;
}
Java中也是通过size()方法获取长度,但是需要通过get(i)的方法获取第i个位置的元素。
import java.util.ArrayList;
public class ArrayListTest{
public static void main(String[] args){
list.add(1);
list.add(2);
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
5.修改元素
C++中修改vector修改某个元素的值非常easy,只需要给他赋值即可,比如vec[i]=0;
#include <vector>
#include <stdio.h>
using namespace std;
int main() {
vector<int> vec; // []
vec.push_back(1); // [1]
vec.push_back(2); // [1, 2]
vec.push_back(3); // [1, 2, 3]
vec[1] = 3; // [1, 3, 3]
vec[2] = 2; // [1, 3, 2]
for (int i = 0; i < vec.size(); ++i) {
printf("%d\n", vec[i]);
}
return 0;
}
Java中若要将index位置上的元素更改为b,需要让对象调用set(index,b)方法
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>(); // []
list.add(1); // [1]
list.add(2); // [1, 2]
list.add(3); // [1, 2, 3]
list.set(1, 3); // [1, 3, 3]
list.set(2, 2); // [1, 3, 2]
for (int i = 0; i < list.size(); ++i) {
System.out.println(list.get(i));
}
}
}
6.怎么清空动态数组内存
C++和Java中通过调用clear()方法就可以清空vector或者ArrayList。
C++中vector的clear()只是清空vector,并不会清空vec所开的内存。用一种方法可以清空内存。
先定义一个空的vector x,然后用需要清空的vector和x交换,因为x是局部变量,所以会被系统回收内存。
vector<int> v;
{
vector<int> x;
v.swap(x);
}
7.方法总结
如需更多请自行查看帮助文档。
欢迎大家踩一踩自建博客http://47.107.118.184