您的位置:首页 > 编程语言 > C语言/C++

【C/C++开发】STL内嵌数据类型: value_type

2017-09-16 00:06 405 查看
使用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;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: