---
# System prepended metadata

title: 資料結構介紹 - Vector - by Peter Wang
tags: [資料結構介紹]

---


# 資料結構介紹 - Vector - by Peter Wang
###### tags: `資料結構介紹`

## vector 簡介
本篇介紹 C++ 的 std::vector 用法，C++ std::vector 教學如下：
要使用 vector 容器的話，需要引入的標頭檔：vector

std::vector 是一個可以改變陣列大小的序列容器。 是陣列的升級版，主要因為 vector 能高效地對記憶體進行管理以及動態增長。 vector 其實就是將陣列和方法封裝形成的一個類別。

## vector 初始化
### 引入標頭檔
```clike=
#include <iostream>
#include <vector>
```
### 建立vector
這邊介紹幾種 vector 初始化，這裡是宣告一個 int(任何型態的都可以，這裡以int當範例)整數類型的 vector，裡面沒有任何元素(空)，size 為 0 表示 vector 容器中沒有任何元素。
```clike=
vector <int> v1;//<可以填任何形態>
vector <int> v2={1,2,3};
vector <int> v3=v2;//兩個vector相等
```

## vector 常用功能
以下為 std::vector 內常用的成員函式

### push_back
push_back：把元素加到尾巴，必要時會進行記憶體配置
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
```

### pop_back
pop_back：移除尾巴的元素
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
```

### insert
insert：插入元素
insert(插入地址,插入數值)
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
v1.insert(v1.begin()+1,2);//{1,2}
```

### erase
erase：移除某個位置元素, 也可以移除某一段範圍的元素
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
v1.insert(v1.begin()+1,2);//{1,2}
v1.erase(v1.begin());//{2}
```
### size：回傳目前長度
size：回傳目前長度
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
v1.insert(v1.begin()+1,2);//{1,2}
v1.erase(v1.begin());//{2}
cout<<v1.size();// 1
```
### clear：清空容器裡所有元素
clear：清空容器裡所有元素
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
v1.insert(v1.begin()+1,2);//{1,2}
v1.erase(v1.begin());//{2}
cout<<v1.size();// 1
v1.clear();
cout<<v1.size();// 0
```

### empty
empty：回傳是否為空
回傳 1 (true) vector是空的；回傳 0 (false) vector有東西
```clike=
vector <int> v1;
v1.push_back(1);//{1}
v1.push_back(2);//{1,2}
v1.pop_back();//{1}
v1.insert(v1.begin()+1,2);//{1,2}
v1.erase(v1.begin());//{2}
cout<<v1.size();// 1
v1.clear();
cout<<v1.size();// 0
cout<<v1.empty();// 1
```

## 備註
>[name=Peter Wang]
>[time=Tue, Aug 31, 2021 2:08 PM]