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


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

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

vector<int> vec;

vector<int>::value_type x;

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

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

vector<C>::value_type x;

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


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

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;  
}  



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM