Visual Studio2010新特性--auto 数据类型自动类型判别

2023-10-19 17:32

本文主要是介绍Visual Studio2010新特性--auto 数据类型自动类型判别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载于http://blog.csdn.net/itcastcpp/article/details/5367045

 

VC++2010在c++语言里面增加了一个特殊的新特性,c++语言可以自动判别数据类型,

而无需跟以前的c++语言一样,需要先定义数据,再使用,c++编译器将自动识别数据类型,

给程序员带来了更多的灵活性与便捷!

auto这个关键字来自VC++ 6.0标准。在VC++ 6.0中它没有什么作用,C++ 0x中“借用”它来作为自动类型推演(automatic type deduction)。当auto出现在声明中时,它表示“请用初始化我的表达式类型作为我的类型”。数据类型可以在编译时推演, 有了auto关键字再也不用写又长又烦的代码了。

请见下列代码,基于vc++2010编译器编译成功,采用图的数据结构进行演示。

 

  1. #include "stdafx.h"   
  2. #include <map>  
  3. #include <vector>  
  4. #include <string>  
  5. #include <iostream>  
  6.   
  7. using namespace std;  
  8.  
  9. #ifdef UNICODE  
  10.     #define tcout wcout  
  11. #else  
  12.     #define tcout cout  
  13. #endif  
  14.   
  15. const vector< basic_string<TCHAR> >* PrintContents(const map<int, vector< basic_string<TCHAR> > >& theMap)  
  16. {  
  17.     for each (auto m in theMap)  
  18.     {  
  19.         tcout << _T("Map element ") << m.first << _T(": ");  
  20.         for each(auto e in m.second)  
  21.         {  
  22.             tcout << _T("'") << e << _T("', ");  
  23.         }  
  24.         tcout << endl;  
  25.     }  
  26.     return NULL;  
  27. }  
  28.   
  29. int _tmain(int argc, _TCHAR* argv[])  
  30. {  
  31.     // / /定义一个图的数据结构,一个整数的字符串类型的字符串  
  32.     map<int, vector< basic_string<TCHAR> > > myMap;  
  33.     // 填充图数据  
  34.     vector< basic_string<TCHAR> > vec1;  
  35.     vec1.push_back(_T("string 1-1"));  
  36.     vec1.push_back(_T("string 1-2"));  
  37.     vec1.push_back(_T("string 1-3"));  
  38.     myMap[1] = vec1;  
  39.   
  40.     vector< basic_string<TCHAR> > vec2;  
  41.     vec2.push_back(_T("string 2-1"));  
  42.     vec2.push_back(_T("string 2-2"));  
  43.     vec2.push_back(_T("string 2-3"));  
  44.     myMap[2] = vec2;  
  45.   
  46.     // 输出图数据  
  47.     tcout << _T("Map contents:") << endl;  
  48.     for (map<int, vector< basic_string<TCHAR> > >::const_iterator citer = myMap.begin();  
  49.         citer != myMap.end(); ++citer)  
  50.     {  
  51.         tcout << _T("Map element ") << (*citer).first << _T(": ");  
  52.         for (vector< basic_string<TCHAR> >::const_iterator citer2 = (*citer).second.begin();  
  53.             citer2 != (*citer).second.end(); ++citer2)  
  54.         {  
  55.             tcout << _T("'") << (*citer2) << _T("', ");  
  56.         }  
  57.         tcout << endl;  
  58.     }  
  59.     tcout << endl;  
  60.   
  61.     // 输出图数据采用自动类型判别  
  62.     tcout << _T("采用自动类型判别:") << endl;  
  63.     for (auto citer = myMap.begin(); citer != myMap.end(); ++citer)  
  64.     {  
  65.         tcout << _T("Map element ") << (*citer).first << _T(": ");  
  66.         for (auto citer2 = (*citer).second.begin(); citer2 != (*citer).second.end(); ++citer2)  
  67.         {  
  68.             tcout << _T("'") << (*citer2) << _T("', ");  
  69.         }  
  70.         tcout << endl;  
  71.     }  
  72.     tcout << endl;  
  73.   
  74.     // 输出图数据采用自动类型判别(兼容 VC++ 2010)  
  75.     tcout << _T("自动类型判别:") << endl;  
  76.     for each (auto m in myMap)  
  77.     {  
  78.         tcout << _T("Map element ") << m.first << _T(": ");  
  79.         for each(auto e in m.second)  
  80.         {  
  81.             tcout << _T("'") << e << _T("', ");  
  82.         }  
  83.         tcout << endl;  
  84.     }  
  85.     tcout << endl;  
  86.   
  87.     // 打印图数据使用函数指针  
  88.     const vector< basic_string<TCHAR> >* (*p)(const map<int, vector< basic_string<TCHAR> > >&) = &PrintContents;  
  89.     tcout << _T("Map contents using a function pointer:") << endl;  
  90.     p(myMap);  
  91.     tcout << endl;  
  92.   
  93.     //打印 图数据借助自动类型输出使用函数指针  
  94.     auto f = &PrintContents;  
  95.     tcout << _T("Map contents using auto as a function pointer:") << endl;  
  96.     f(myMap);  
  97.     tcout << endl;  
  98.   
  99.     return 0;  
  100. }  

这篇关于Visual Studio2010新特性--auto 数据类型自动类型判别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241310

相关文章

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字