动态数组vector简介(Java和C++)

版权声明:@ly https://blog.csdn.net/lytwy123/article/details/83660217

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));
            }
        }
    }

6.修改元素


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));
        }
    }
}

7.怎么清空动态数组内存


C++和Java中通过调用clear()方法就可以清空vector或者ArrayList。

C++中vector的clear()只是清空vector,并不会清空vec所开的内存。用一种方法可以清空内存。
先定义一个空的vector x,然后用需要清空的vector和x交换,因为x是局部变量,所以会被系统回收内存。

vector<int> v;
{
    vector<int> x;
    v.swap(x);
}

8.方法总结


如需更多请自行查看帮助文档。

欢迎大家踩一踩自建博客http://47.107.118.184

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/83660217