Visual Studio2010新特性--C++王者归来(1)--数据类型自动类型判别

 

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

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

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

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

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

 

 

#include "stdafx.h" #include <map> #include <vector> #include <string> #include <iostream> using namespace std; #ifdef UNICODE #define tcout wcout #else #define tcout cout #endif const vector< basic_string<TCHAR> >* PrintContents(const map<int, vector< basic_string<TCHAR> > >& theMap) { for each (auto m in theMap) { tcout << _T("Map element ") << m.first << _T(": "); for each(auto e in m.second) { tcout << _T("'") << e << _T("', "); } tcout << endl; } return NULL; } int _tmain(int argc, _TCHAR* argv[]) { // / /定义一个图的数据结构,一个整数的字符串类型的字符串 map<int, vector< basic_string<TCHAR> > > myMap; // 填充图数据 vector< basic_string<TCHAR> > vec1; vec1.push_back(_T("string 1-1")); vec1.push_back(_T("string 1-2")); vec1.push_back(_T("string 1-3")); myMap[1] = vec1; vector< basic_string<TCHAR> > vec2; vec2.push_back(_T("string 2-1")); vec2.push_back(_T("string 2-2")); vec2.push_back(_T("string 2-3")); myMap[2] = vec2; // 输出图数据 tcout << _T("Map contents:") << endl; for (map<int, vector< basic_string<TCHAR> > >::const_iterator citer = myMap.begin(); citer != myMap.end(); ++citer) { tcout << _T("Map element ") << (*citer).first << _T(": "); for (vector< basic_string<TCHAR> >::const_iterator citer2 = (*citer).second.begin(); citer2 != (*citer).second.end(); ++citer2) { tcout << _T("'") << (*citer2) << _T("', "); } tcout << endl; } tcout << endl; // 输出图数据采用自动类型判别 tcout << _T("采用自动类型判别:") << endl; for (auto citer = myMap.begin(); citer != myMap.end(); ++citer) { tcout << _T("Map element ") << (*citer).first << _T(": "); for (auto citer2 = (*citer).second.begin(); citer2 != (*citer).second.end(); ++citer2) { tcout << _T("'") << (*citer2) << _T("', "); } tcout << endl; } tcout << endl; // 输出图数据采用自动类型判别(兼容 VC++ 2010) tcout << _T("自动类型判别:") << endl; for each (auto m in myMap) { tcout << _T("Map element ") << m.first << _T(": "); for each(auto e in m.second) { tcout << _T("'") << e << _T("', "); } tcout << endl; } tcout << endl; // 打印图数据使用函数指针 const vector< basic_string<TCHAR> >* (*p)(const map<int, vector< basic_string<TCHAR> > >&) = &PrintContents; tcout << _T("Map contents using a function pointer:") << endl; p(myMap); tcout << endl; //打印 图数据借助自动类型输出使用函数指针 auto f = &PrintContents; tcout << _T("Map contents using auto as a function pointer:") << endl; f(myMap); tcout << endl; return 0; }

需要源码请在本人CSDN博客留下Email,欢迎技术交流!

 

本文作者专著《Visual C++2010开发权威指南》即将推出,敬请关注,Visual C++2010最近技术,Windows7开发最新技术!

你可能感兴趣的:(数据结构,vector,String,basic,iterator,2010)