【C/C++開發】STL內嵌數據類型: value_type

使用stl庫的時候一直對value_type這個東西理解的不是很好,能夠說就是不理解。今天看了《STL源碼剖析》才恍然大悟。這裏稍做記錄。css

每一個STL中的類都有value_type這種東西,通俗的說value_type 就是stl容器盛裝的數據的數據類型,例如:html

vector<int> vec;ios

vector<int>::value_type x;spa

上述兩句代碼,第一句是聲明一個盛裝數據類型是int的數據的vector,第二句是使用vector<int>::value_type定義一個變量x,這個變量x其實是int類型的,由於vector<int>::value_type中聲明的爲int型。相應的,假設有:htm

vector<C> vec;  //假設C是自定義類型對象

vector<C>::value_type x;源碼

那麼第二句定義的變量x的數據類型是C。it


每一個STL容器類(感受應該是迭代器類更加準確),都有一句相同的代碼:io

typede T value_type;模板

其中T則是類模板中使用的參數 :

template <class T> 

以STL的list容器爲例,那麼它的類定義就應該有下面的語句:

template<class T>

class list{

publict:

typedef  T  value_type;

//……

};

上述寫法,在《STL源碼剖析》中稱爲「聲明內嵌型別」技術。

這樣一來咱們就知道value_type是個什麼東西了。接下來就是怎麼用啦。

這裏要說個人老師真的不怎麼滴,對語句

template <class T>

的解釋實在是太膚淺啦。我如今也是豁然開朗,這個關鍵就是class  T。竟然這個T能夠是一個class,那麼value_type也就是能夠用來定義class的對象了。因此就能夠有下面代碼的用法啦:


#include <list>   #include <vector>   #include <iostream>   using namespace std;   class C{   public:       C(int x){           cout << x << endl;       }       C(){           cout << 10 << endl;       }      };      void main(){       vector<C> vec;       C c1,c2(11);       vec.push_back(c1);       vec.push_back(c2);       vector<C>::value_type n1;       vector<C>::value_type n2(13);       vec.push_back(n1);       vec.push_back(n2);       cout << vec.size() << endl;   }  

相關文章
相關標籤/搜索