使用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相关推荐

  1. 在C++中侦测内嵌型别的存在(rev#2)

    在C++中侦测内嵌类型的存在(rev#2) By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) 动机(Motivation) 假设一所大学的注册系统 ...

  2. 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】

    一.介绍 MONGODB 的表结构 很灵活 .主要还是因为 字段中可以包含 [ 数组].[内嵌文档]. 现在简单介绍一下 字段中的[ 数组].[内嵌文档]相关的一些操作 (为了方便理解,还是以表来理解 ...

  3. java 内嵌调用_Java高级开发必会的50个性能优化的细节(珍藏版)

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. ● 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载 ...

  4. 标量函数,多语句表值函数,内嵌表值函数

    标量函数返回一个标量(单值)结果,可返回Timestamp,text,Ntext,Image,Table,Cursor 多语句表值函数,返回一条或多条Transact-sql语句建立的表,可在sele ...

  5. 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)

    内嵌TagHelper 上一篇文章中提到有时候需要设计一种内嵌的TagHelper,如下: <my name="yy" age="35"><l ...

  6. Go语言学习 二十一 内嵌

    本文最初发表在我的个人博客,查看原文,获得更好的阅读体验 在像Java这种语言中,有子类(或者继承)的概念,通过继承复用已有的功能或属性,与继承不同,Go中使用组合的方式来完成已有实现的复用,这种做法 ...

  7. Html 内嵌 选择器属性 Dom操作 JavaScript 事件

    HTML标签: 一.通用标签(一般标签) 1.格式控制标签 <font color="#6699aa" face="楷体" size="24&q ...

  8. mongodb java 内嵌文档_MongoDB 内嵌文档

    MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...

  9. java内嵌数据库_Java嵌入式数据库-MapDB

    MapDB可以直接将Java的数据类型存储至直接内存而非JVM的堆中,也可以将数据持久化到磁盘. 与文无关 今天和大家介绍一个Java的第三方库,MapDB,它是用Kotlin写的,据说代码质量还不错 ...

最新文章

  1. Plugin with id 'com.novoda.bintray-release' not found的解决方法
  2. 手把手教你深度学习强大算法进行序列学习(附Python代码)
  3. python输入输出简单例子_Python 文件和流的简单示例
  4. hive如何处理not in和in的问题
  5. js 内置对象的方法
  6. 局部临时表 全局临时表 表变量
  7. python模块 - 序列化模块pickle
  8. IOS 使用 ZbarSDK 二维码扫描
  9. CVPR2020-深度图超分辨率DSR新方法| Channel Attention based Iterative Residual Learning for Depth Map SR
  10. KL散度、交叉熵与JS散度数学公式以及代码例子
  11. 二阶低通有源滤波器设计与仿真测试
  12. 细数中国大学里的30个怪现状
  13. 苹果手机上网很慢_手机4G信号满格,上网速度却很慢?原来都是它们在“搞鬼”...
  14. 关于Spring容器中定时器到时执行会出现两个线程同时执行的问题
  15. linux的图形界面的管理
  16. 【历史上的今天】6 月 5 日:洛夫莱斯和巴贝奇相遇;公钥密码学先驱诞生;函数语言设计先驱出生
  17. 定时停用计算机服务器,如何让服务器每天定时开关机?
  18. oracle leg,[LEG引擎]英雄合击数据库
  19. centOS7安装Python3教程,很简单
  20. pvcreate创建时报Metadata area size too small

热门文章

  1. SQLite shell操作
  2. mysql按日期获取最新_mysql获取按日期排序获取最新的记录
  3. MySQL分页查询小技巧
  4. c# 操作oracle数据库,C#连接oracle数据库增删改查实例
  5. swagger接口文档使用
  6. 【C++深度剖析教程14】经典问题解析三之关于赋值的疑问
  7. 07.用户故事与敏捷方法——优秀用户故事准则笔记
  8. 如何将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
  9. 第五章数理统计--样本和抽样分布
  10. [Leetcode][第696题][JAVA][计算二进制子串][分组]