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

C++ STL vector 是模板而非類型:正確使用 vector::size_type

     編輯:關於C語言

誤區由來

初學 STL 時常見錯誤:直接寫 vector::size_type i;,編譯器報錯 error C2955: 'vector' : use of class template requires template argument list。原因在於 vector 是類模板,而非具體類型,必須提供模板參數才能實例化出真正的類型。

正確寫法

// 錯誤示範
vector::size_type i;  // ❌ vector 是模板,缺少模板參數

// 正確示範
vector<int>::size_type i1;      // ✅ 具體化為 int 版本
vector<string>::size_type i2;   // ✅ 具體化為 string 版本
vector<MyClass>::size_type i3;  // ✅ 自定義類型同理

深入理解

  • vector 本身是「類型製造機」,vector<int> 才是真正的類型。
  • size_type 是 vector 內部定義的嵌套類型,通常是 size_t(無符號整數),用於表示容器大小/索引。
  • 同理,vector<T>::iterator、vector<T>::value_type 等皆需先具體化 T。

現代 C++ 建議

C++11 起推薦使用 auto 簡化聲明:

vector<int> vec = {1, 2, 3};
for (auto i = vec.size(); i > 0; --i) { ... }  // i 自動推導為 size_type
for (auto it = vec.begin(); it != vec.end(); ++it) { ... }

總結

記住口訣:「模板須實例化,嵌套類型纔可用」。遇到 vector::xxx 報錯,第一反應檢查是否漏寫 <T>。

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