初學 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++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>。