c++ vector 教學 | 用法及範例

c++ vector 教學

建立 vector

  • #include <vector> : 引入 vector
  • vector<dataType> vec : 宣告
  • vector<dataType> vec={data1, data2} : 宣告 + 初始化
  • vector<dataType> v(x); : 建立一個大小為 x 的 vector,每個元素會被初始化為 0 / " " / false (根據 dataType)
  • vector<dataType> v(x, y); : 建立一個大小為 x 的 vector,每個元素會被初始化為 y
使用範例 :
#include <iostream>
#include <vector>
using namespace std;

int main(){
    
    vector<int> vec1;           // vec1 = {}
    vector<int> vec2={1, 2, 3}; // vec2 = {1, 2, 3}
    vector<int> vec3(3);        // vec3 = {0, 0, 0}
    vector<int> vec4(4, 5);     // vec3 = {5, 5, 5, 5}

    return 0;
}

新增及刪除元素

  • vec.push_back(val) : 將元素(val) 插入 vector 的尾端
  • vec.insert(position, val) : 將元素插入指定的位子(position)
  • vec.pop_back() : 刪除 vector 最尾端的元素
  • vec.erase(position) : 刪除 vector 中位在 position 的元素
  • vec.erase(first, last) : 刪除 vector 中在 first~last 的元素
  • vec.clear() : 清空所有元素
使用範例 :
#include <iostream>
#include <vector>
using namespace std;

int main(){
    
    vector<int> vec;

    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);           // vec = {1, 2, 3}
    vec.insert(vec.begin(), 4); // vec = {4, 1, 2, 3}

    vec.pop_back();             // vec = {4, 1, 2}
    vec.erase(vec.begin());     // vec = {1, 2}

    vec.clear();                // vec = {}
}

存取元素

  • vec.front() : 取得 vector 的第一個元素
  • vec.back() : 取得 vector 的最後一個元素
  • vec[i] : 取得 vector 的第 i 個元素
  • vec.at(i) : 取得 vector 的第 i 個元素
使用範例 :
#include <iostream>
#include <vector>
using namespace std;

int main(){

    int x;
    vectorr<int> vec={1,2,3,4,5};

    x=vec.front(); // x = 1
    x=vec.back();  // x = 5
    x=vec[2];      // x = 3
    x=vec.at(3);   // x = 4

    return 0;
}

修改元素

  • vec[i]=val : vector 的第 i 個元素改成 val
  • vec.at(i)=val : vector 的第 i 個元素改成 val
使用範例 :
#include <iostream>
#include <vector>
using namespace std;

int main(){

    int x;
    vectorr<int> vec={1,2,3,4,5};

    vec[0] = 100;    // vec = {100, 2, 3, 4, 5}
    vec.at(3) = 0;   // vec = {100, 2, 3, 0, 5}

    return 0;
}

走訪 vector

下列方法都可以用~
#include <iostream>
#include <vector>
using namespace std;

int main(){

    vector<int> vec={1,2,3,4,5};
    
    // method 1
    for (int i=0; i<vec.size(); i++) {
        cout<<vec[i]<<" ";
    }
    cout<<endl;

    // method 2
    for(auto i:vec){
        cout<<i<<" ";
    }
    cout<<endl;

    // method 3
    for (auto iter=vec.begin(); iter!=vec.end(); iter++) {
        cout<<*iter<<" "; // 需要 dereference
    }
    cout<<endl;
    
    return 0;
}

其他

  • vec.size() : vector 的大小
  • vec.empty() : 判斷 vector 是不是空的
  • vec.begin() : 指向 vector 第一個元素的 iterator
  • vec.end() : 指向 vector 最尾端元素的下一個位置的 iterator
使用範例 :
#include <iostream>
#include <vector>
using namespace std;

int main(){

    vector<int> vec={1,2,3,4,5};

    vec.size();    // 5
    vec.empty();   // false
    *vec.begin();  // 1

    return 0;
}