1. 程式人生 > >動態陣列vector詳解(Java和C++)

動態陣列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.方法總結

如需更多請自行檢視幫助文件。