動態陣列vector詳解(Java和C++)
阿新 • • 發佈:2018-12-19
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.方法總結
如需更多請自行檢視幫助文件。