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

C++ vector 進階用法全解析:向量指針、指針向量、多維嵌套與內存佈局

     編輯:關於C++

vector 本質

`vector` 是類模板,需指定元素類型 `T`。`vector` 本身是一個類型(如 `vector`),可定義變量 `vector v;`。元素連續存儲,支持隨機訪問。

四種常見嵌套形式

1. 普通向量:`vector k`

存儲 `int` 元素。`push_back`, `operator[]` 直接操作值。

2. 指針向量:`vector kk`

元素類型為 `int*`。存儲地址,訪問值需解引用 `*kk[i]`。適用場景:多數組共享元素、多態對象指針容器、避免大對象拷貝。注意:`vector` 不管理指針指向的內存,需手動 `new`/`delete`。

3. 向量指針:`vector* kkk`

指向 `vector` 的指針。可動態分配向量數組:`kkk = new vector[5];` 訪問:`kkk[i].push_back(val)`。本質是向量的動態數組,釋放需 `delete[] kkk;`。

4. 指針向量指針:`vector* kkkk`

指向「指針向量」的指針。雙重動態分配:`kkkk = new vector[5];` 內層向量存 `int*`。訪問:`(*kkkk[i])[j]` 或 `kkkk[i]->at(j)` 後解引用。極少用,易出錯。

內存佈局對比

類型結構元素存儲適用場景
`vector`單塊連續內存值通用動態數組
`vector`連續指針數組 + 零散堆內存地址共享/多態/大對象
`vector*`指針 → 向量數組(每向量獨立連續塊)值(分塊)動態數量的向量集合
`vector>`外層連續向量對象,內層各自連續值(分塊)二維不規則矩陣/鄰接表

最佳實踐建議

  • 優先用 `vector`、`vector>` 等值語義容器,利用 RAII 自動管理內存。
  • 需共享所有權用 `vector>`(C++11)。
  • 需多態用 `vector>` 或 `vector>`。
  • 避免裸指針容器(`vector`),除非與 C API 交互或極度性能敏感且手動管理可控。
  • `vector*` 少用,改用 `vector>` 或 `vector>>`。

代碼示例要點

文中提供四種形式的完整增刪查示例,展示 `new`/`delete`、`push_back`、`operator[]`、解引用、循環遍歷等操作差異。注意 `vector k; k.push_back(&p[j]);` 中 `p` 為 `new int[15]`,生命周期手動控制。

總結

理解 `vector` 模板參數與指針/引用的組合語義,是掌握 C++ 內存模型、避免資源洩漏、選擇正確數據結構的關鍵。現代 C++(C++11/14/17/20)配合智能指針、移動語義、結構化綁定,能以值語義解決絕大多數指針容器場景,代碼更安全、可維護。

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