【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;
}
【C/C++开发】STL内嵌数据类型: value_type的更多相关文章
- [Unity3D]Unity3D游戏开发Android内嵌视图Unity查看
---------------------------------------------------------------------------------------------------- ...
- 基于内嵌Tomcat的应用开发
为什么使用内嵌Tomcat开发? 开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率. 怎么搭建内嵌To ...
- [小程序开发] 微信小程序内嵌网页web-view开发教程
为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...
- 移动端开发利器vConsole.js,app内嵌H5开发时调试用
vConsole:一个轻量.可拓展.针对手机网页的前端开发者调试面板,主要还是用于内嵌app页面时在手机上进行调试,打印完全和在PC端一样,方便大家找出问题所在. 不说废话直接进入主题,vConsol ...
- Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)
ASP.NET Core知多少系列:总体介绍及目录 Demo路径:GitHub-RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2. ...
- Jetty 开发指南:Jetty 内嵌开发
Jetty的口号是“不要在Jetty中部署你的应用程序,在你的应用程序中部署Jetty!” 这意味着,作为将应用程序捆绑为要部署在Jetty中的标准WAR的替代方案,Jetty旨在成为一个软件组件,可 ...
- Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结
前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...
- Windows10内嵌Ubuntu子系统配置python开发环境
Windows10内嵌Ubuntu子系统配置python开发环境 安装pycharm. 到intellij idea网站下载Linux环境下载免费的pycharm,通过ubuntu子系统内部的/mnt ...
- 3.MVC框架开发(Razor内嵌函数)
1.建立没有返回值的Razor内嵌函数(但是能直接输出内容) 必须以@符号开头,没有返回值但能直接输出内容,比如: @helper showTitle(string strTitle){ ){ @(s ...
随机推荐
- 添加wcf服务引用,无法签出当前文件
写了一些wcf服务接口,使用控制台可以正常启动服务,想要测试一下,新建项目添加服务引用,提示:“无法签出当前文件.该文件可能为只读或已锁定,或者您需要手动签出它.” 在网上找了找,有说可能是因为源代码 ...
- spring-security.xml——安全性框架配置文件
<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://w ...
- em与rem之间的区别以及移动设备中的rem适配方案
em与rem之间的区别: 共同点: 它们都是像素单位 它们都是相对单位 不同点: em大小是基于父元素的字体大小 rem大小是基于根元素(html)的字体的大小 实例: <!DOCTYPE ht ...
- 01java中常用的一些算法工具——map转xml和xml转map
借鉴博客:https://blog.csdn.net/Goodbye_Youth/article/details/80937862 他这篇写的不错,多层嵌套的map也能转成xml 这篇也不错:http ...
- 基于RGB与HSI颜色模型的图像提取法
现实中我们要处理的往往是RGB彩色图像.对其主要通过HSI转换.分量色差等技术来提出目标. RGB分量灰度化: RGB可以分为R.G.B三分量.当R=G=B即为灰度图像,很多时候为了方便,会直接利用某 ...
- VMWare虚拟机出现问题
软件版本:VMware ESXi 5.5.0 服务器型号: Dell R720 问题经过: 某天ssh登录其中一个虚拟机,报错:kernel:BUG: soft lockup - CPU#6 stuc ...
- spring项目使用mave将第三方jar包打进war包中
背景:一个标准的ssm项目,需要使用到第三方jar,现需要将项目发布到liunx的服务器上,将项目打成war包,第三方war包也需要打进去 首先是直接打包,发现第三方jar包并没有打进去......蛋 ...
- 逆向破解之160个CrackMe —— 031
CrackMe —— 031 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...
- 用Python玩转微信
Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货! 这个是在 itchat上做的封装 http://itchat.readthedocs.io ...
- Ubuntu18.04安装redis-server启动出错
虽然报错原因可能是 redis-server.service: Can't open PID file /var/run/redis/re Aug 26 15:43:25 iZ2ze6ddwhet60 ...