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; ?
} ?
總結
以上是生活随笔為你收集整理的STL内嵌数据类型: value_type的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机票价格上涨 航空公司为补贴故意涨价?民
- 下一篇: 怎样培养富人思维方式?三个简单技巧