【C++教學】vector 動態大小的陣列 說明與用法範例

vector 是 C++ 標準模板庫(STL, Standard Template Library)的成員之一,它是一種動態大小的陣列,支援隨機存取,適合需要靈活調整大小的場景。它的記憶體配置是連續的,查詢效率高,但插入或刪除非尾端元素時效率較低。

特性

  • 動態調整大小,無需手動管理記憶體。
  • 支援隨機存取(透過索引)。
  • 尾端插入與刪除操作效率高(O(1))。
  • 非尾端插入與刪除效率較低(O(n))。

成員函數介紹

  • push_back:將元素添加到向量尾端。
  • pop_back:移除向量尾端的元素。
  • size:返回向量中元素的數量。
  • erase:移除指定位置或範圍的元素。
  • insert:在指定位置插入新元素。
  • resize:調整向量的大小,可擴大或縮小,若擴大則指定新增元素的初始值。

需要注意的是 vector 沒有 find 這個成員函數,如果需要在 vector 裡尋找指定元素的話,要用包含在 <algorithm> 裡面的 find 函數。

用法範例

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    // 宣告一個整數向量
    vector<int> vec;
    // vector<int> vec(5, 0); // 也可以在宣告時直接指定向量的大小5和每個元素的初始值0

    // 在尾端新增元素
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30); // 此行執行後vec=[10,20,30]

    // 透過索引存取與修改元素
    vec[1] = 25; // 此行執行後vec=[10,25,30]

    // 取得向量大小
    int size = vec.size(); // vec.size()=3

    // 遍歷向量
    cout << "向量內容:";
    for (int v : vec) {
        cout << v << " ";
    }
    cout << endl;

    // 刪除指定索引的元素
    vec.erase(vec.begin() + 1); // 刪除索引為1的元素,此行執行後vec=[10,30]

    // 在指定索引插入元素
    vec.insert(vec.begin() + 1, 5); //在索引1插入5,此行執行後vec=[10,5,30]

    // 刪除尾端元素
    vec.pop_back(); // 此行執行後vec=[10,5]

    // 調整向量的大小,可擴大或縮小,若擴大則指定新增元素的初始值
    vec.resize(3, 0); // 調整向量的大小為3,新增的元素的初始值為0,此行執行後vec=[10,5,0]

    // 尋找指定元素
    if (find(vec.begin(), vec.end(), 5) != vec.end()) 
    {
        // 元素存在
    }
    else
    {
        // 元素不存在
    }

    return 0;
}

適用場景

  • 需要動態調整陣列大小時。
  • 頻繁進行尾端操作或隨機存取時。

返回頂端