首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ std::vector 完整函數參考與實戰用法詳解

     編輯:關於C語言

前言

std::vector 是 C++ 標準程式庫中最常用的序列容器,提供動態陣列功能,支援快速隨機存取、尾端高效增刪,並自動管理記憶體。本文系統整理其建構函式、運算子、核心成員函數與迭代器用法,並附上可編譯範例,助你快速掌握實戰技巧。

一、建構函數

vector 提供多種建構方式:

  • vector():建立空容器
  • vector(size_type n, const T& val):建立含 n 個 val 的容器
  • vector(const vector& other):拷貝建構
  • vector(InputIt first, InputIt last):以迭代器區間 [first, last) 初始化
std::vector<int> v1(5, 42); // 5 個 42

二、關係運算子

支援 == != < > <= >=,比較規則為字典序:先比對元素,再比大小。

三、元素存取

operator[] vs at()

v[pos] 不檢查邊界,效能高;v.at(pos) 會拋出 std::out_of_range 異常,較安全。

std::vector<int> v(5, 1);
for (int i = 0; i < 10; ++i) {
    // v[i] 若越界行為未定義
    std::cout << v.at(i) << '\n'; // 安全:越界拋出異常
}

front() / back()

分別回傳首尾元素的引用,容器不可為空。

std::vector<int> v = {0,1,2,3,4};
std::cout << v.front() << ' ' << v.back(); // 0 4

四、迭代器

  • begin() / end():正向迭代器,end() 指向尾後位置
  • rbegin() / rend():反向迭代器
for (auto it = v.begin(); it != v.end(); ++it)
    std::cout << *it << ' ';

五、容量管理

函數說明
size()目前元素數量
capacity()不重新配置記憶體可容納的元素數
reserve(n)預留至少 n 個元素空間,避免頻繁擴容
resize(n, val)調整大小為 n,新元素填 val
empty()判斷是否為空
max_size()理論最大容量

六、修改容器

assign

v.assign(3, 10);           // 3 個 10
v.assign(arr, arr + 5);    // 從陣列複製

push_back / pop_back

尾端插入/刪除,攤還 O(1)。

insert

v.insert(pos, val);              // 單一元素
v.insert(pos, 3, val);           // 3 個 val
v.insert(pos, first, last);      // 區間插入

erase

v.erase(pos);          // 刪除單一元素
v.erase(first, last);  // 刪除區間,回傳下一有效迭代器

clear / swap

clear() 清空容器;swap(other) 常數時間交換內容。

七、配置器

get_allocator() 回傳關聯的配置器,進階用途較少見。

八、完整範例:學生資料管理

#include <vector>
#include <string>
#include <iostream>

struct Student {
    std::string name;
    int age;
    int c_score;
    int en_score;
    int total() const { return c_score + en_score; }
};

int main() {
    std::vector<Student> stu;
    int n; std::cin >> n;
    for (int i = 0; i < n; ++i) {
        Student s;
        std::cout << "Name: "; std::cin >> s.name;
        std::cout << "Age: ";  std::cin >> s.age;
        std::cout << "C: ";    std::cin >> s.c_score;
        std::cout << "English: "; std::cin >> s.en_score;
        stu.push_back(s);
    }
    std::cout << "--------------------------\n\n";
    for (const auto& s : stu) {
        std::cout << "Name: " << s.name << '\n'
                  << "Age: " << s.age << '\n'
                  << "C: " << s.c_score << '\n'
                  << "English: " << s.en_score << '\n'
                  << "Total: " << s.total() << "\n\n";
    }
    return 0;
}

九、效能提示

  • 已知大致規模時,先 reserve() 減少重新配置
  • 優先使用 push_back / emplace_back,避免中間插刪
  • 需要頻繁中間操作時,考慮 std::list 或 std::deque
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved