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

C++ STL 容器深度解析:vector 向量容器完全指南

     編輯:C++ 入門

STL 容器概述

標準模板庫(STL)是 C++ 的核心類庫,提供了豐富的容器類別。STL 容器主要分為三大類:序列容器(如 vector、list、deque)、關聯容器(如 set、map)以及容器適配器(如 stack、queue、priority_queue)。此外還有 bitset、string 等專用容器。本系列將重點介紹七種基礎容器:vector、list、deque、set、multiset、map、multimap。

序列容器特性

序列容器按照線性順序存儲元素,每個元素都有固定位置。三種主要序列容器分別為:

  • 向量:動態陣列,支援隨機存取
  • 雙端佇列:雙端操作,支援隨機存取
  • 列表:雙向鏈表,僅支援循序存取

vector 向量容器詳解

#include <vector>

vector 是動態陣列的類模板,內部封裝了豐富操作。作為類,它提供四種建構函式:

1. 預設建構函式

建立長度為 0 的空向量:vector<int> v1;

2. 指定大小的建構函式

vector<int> v2(n, 0); 建立含 n 個元素的向量,初始值為 0(第二參數可省略)。

3. 複製建構函式

vector<int> v3(v2); 以現有向量完整複製建立新向量。

4. 區間建構函式

vector<int> v4(first, last); 以半開區間 [first, last) 初始化。

程式範例:區間初始化

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

int ar[10] = {12, 45, 234, 64, 12, 35, 63, 23, 12, 55};
char* str = "Hello World";

int main() {
    vector<int> vec1(ar, ar + 10);
    vector<char> vec2(str, str + strlen(str));

    cout << "vec1:" << endl;
    for (vector<int>::const_iterator p = vec1.begin(); p != vec1.end(); ++p)
        cout << *p;
    cout << '\n' << "vec2:" << endl;
    for (vector<char>::const_iterator p1 = vec2.begin(); p1 != vec2.end(); ++p1)
        cout << *p1;
    cout << '\n';
    return 0;
}

常用成員函式實戰演示

以下範例展示 begin()、end()、push_back()、assign()、front()、back()、erase()、empty()、at()、size() 等核心函式:

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

typedef vector<int> INTVECTOR;

int main() {
    INTVECTOR vec1;
    INTVECTOR vec2(10, 6);
    INTVECTOR vec3(vec2.begin(), vec2.begin() + 3);
    INTVECTOR::iterator i;

    // 顯示初始狀態
    cout << "vec1.begin()--vec1.end():" << endl;
    for (i = vec1.begin(); i != vec1.end(); ++i) cout << *i << " ";
    cout << endl;

    cout << "vec2.begin()--vec2.end():" << endl;
    for (i = vec2.begin(); i != vec2.end(); ++i) cout << *i << " ";
    cout << endl;

    cout << "vec3.begin()--vec3.end():" << endl;
    for (i = vec3.begin(); i != vec3.end(); ++i) cout << *i << " ";
    cout << endl;

    // 新增與插入操作
    vec1.push_back(2);
    vec1.push_back(4);
    vec1.insert(vec1.begin() + 1, 5);
    vec1.insert(vec1.begin() + 1, vec3.begin(), vec3.end());
    cout << "after push() and insert() now the vec1 is:" << endl;
    for (i = vec1.begin(); i != vec1.end(); ++i) cout << *i << " ";
    cout << endl;

    // 賦值操作
    vec2.assign(8, 1);
    cout << "vec2.assign(8,1):" << endl;
    for (i = vec2.begin(); i != vec2.end(); ++i) cout << *i << " ";
    cout << endl;

    // 存取操作
    cout << "vec1.front()=" << vec1.front() << endl;
    cout << "vec1.back()=" << vec1.back() << endl;
    cout << "vec1.at(4)=" << vec1.at(4) << endl;
    cout << "vec1[4]=" << vec1[4] << endl;

    // 刪除操作
    vec1.pop_back();
    vec1.erase(vec1.begin() + 1, vec1.end() - 2);
    cout << "vec1.pop_back() and vec1.erase():" << endl;
    for (i = vec1.begin(); i != vec1.end(); ++i) cout << *i << " ";
    cout << endl;

    // 狀態查詢
    cout << "vec1.size(): " << vec1.size() << endl;
    cout << "vec1.empty(): " << vec1.empty() << endl;
    return 0;
}

關鍵函式說明

  • push_back():向 vector 或 deque 尾部新增元素的標準函式
  • insert():在任意位置插入,所有容器通用但用法較複雜
  • end():返回指向尾後位置的迭代器,方便迴圈終止判斷

Java Vector 對比

Java 的 Vector 是物件集合,元素可為不同型別,支援增刪,但無法直接存放基本資料型別,這與 C++ 模板機制有本質差異。

透過本文介紹,相信讀者能更深入理解 vector 容器的運作機制與實際應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved