# Array v.s. Vector
## 初始化
### 1D Array
```cpp
int a1[3] = {0}; // {0,0,0}
int a2[3] = {1}; // {1,0,0}
int a3[3] = {1,2,3}; // {1,2,3}
```
### 1D Vector
`vector<int> v(n, m)`: n 個 m
```cpp
vector<int> v1; // {}
vector<int> v2(3); // {0,0,0}
vector<int> v3(3,1); // {1,1,1}
vector<int> v4({1,2,3}); // {1,2,3} (c++11 only)
```
### 2D Array
```cpp
int aa1[2][3] = {0}; // {{0,0,0}, {0,0,0}}
int aa2[2][3] = {1}; // {{1,0,0}, {0,0,0}}
int aa3[2][3] = {{1,2,3}, {4,5,6}}; // {{1,2,3}, {4,5,6}}
```
### 2D Vector
```cpp
vector<vector<int> > vv1; // {}
vector<vector<int> > vv2(2); // {{}, {}}
vector<vector<int> > vv3(2, vector<int>(3)); // {{0,0,0}, {0,0,0}}
vector<vector<int> > vv4(2, vector<int>(3,1)); // {{1,1,1}, {1,1,1}}
vector<vector<int> > vv5(2, vector<int>({1,2,3})); // {{1,2,3}, {1,2,3}} (c++11 only)
vector<vector<int> > vv6({{1,2,3}, {4,5,6}}); // {{1,2,3}, {4,5,6}} (c++11 only)
```
## Function
```cpp
void passArray(int arr[], int size) {} // arr[size]
void passArrayByPointer(int* arr, int size) {} // arr[size]
void passArray2D(int arr[][3], int size) {} // arr[size][3]
void passVector(vector<int>& vec) {}
void passVector2D(vector<vector<int> >& vec) {}
```
## Vector 基本操作
- 讀取 element: `vec[i]`
- 長度: `vec.size()`
- 後面增加一個 element: `vec.push_back(element)`
- 刪除最後一個 element: `vec.pop_back()`
```cpp
#include <vector>
using namespace std;
vector<int> vec; // {}
vec.push_back(3); // {3}
vec.push_back(5); // {3,5}
vec.pop_back(); // {3}
// iterate through vector
for (int i=0;i<vec.size();i++) {
cout << vec[i] << " ";
}
```
## C++11 設定
- DevC++:
請在 tools->complier options 的第一格 Add the following commands... 打勾
並增加一行 `-std=c++11`
- Codeblocks:
請在 setting->complier 勾第4個 (-std=c++11)