C++ 高级语法学习与总结(代码实例)

    C++11增加了许多的特性,auto就是一个很明显的例子。  还有就是typedid()获取数据变量的类型

    看下面简短的代码:

         atuo: 很像java中的加强for循环....。

 1 //获取一个数据变量的类型

 2 #include<iostream>

 3 #include<stdlib.h>

 4 

 5 int main() {

 6 

 7     double db = 10.9;

 8     double *ps = &db;

 9     auto var =*ps;

10     std::cout<<typeid(var).name()<< std::endl;

11     getchar();

12   return 0;

13 }

C++ 高级语法学习与总结(代码实例)

关于C++关于款字符的使用:

   

 1 //关于宽字符的使用

 2 #include<iostream>

 3 

 4 #include<stdlib.h>

 5 #include<locale>

 6 

 7 int main(int argv ,char args []) {

 8 

 9     setlocale(LC_ALL, "chs");  //这就是设定为本地,中文简体

10     wchar_t * p2 = L"1234frd";

11     std::wcout << p2 << std::endl;

12     wchar_t *pi  = L"北京adas,你好!";

13     std::wcout << pi <<std::endl;

14 

15     getchar();

16     return 0;

17 }

 关于数组类型的使用:

  

 1 //新数组的使用

 2 #include<iostream>

 3 #include<array>

 4 #include<stdlib.h>

 5 

 6 

 7 int main(int argv ,char args []) {

 8 

 9    //array数据类型

10     

11     std::array<double ,5>data={2,3,4,5,6};

12     for (auto var : data) {

13         std::cout << "var =" << var << std::endl;

14     }

15     getchar();

16     return 0;

17 }

   对于这里,我们需要知道的是,array的建立实在栈的基础上,所以最大尺寸不要大于1M ,不然会出现栈溢出。

   而对于vector而言,是建立在堆上的,所以没有溢出的说法。

 4, C++新特性,lambda表达式(匿名函数)

 1 //新数组的使用

 2 #include<iostream>

 3 #include<vector>

 4 #include<algorithm>

 5 #include<stdlib.h>

 6 

 7 int main(int argv ,char args []) {

 8 

 9     std::vector<int>  myvec;

10     myvec.push_back(1);

11     myvec.push_back(2);

12     myvec.push_back(3);

13     myvec.push_back(4);

14     myvec.push_back(5);

15     int res = 0;

16     //lambda 表达式  求和

17     //&res直接操作一个变量,res等价于返回值,x代表参数

18     //每次充当迭代器指向的元素,大括号就是代码

19     std::for_each(myvec.begin(), myvec.end(), [&res](int x) {res += x; });

20     std::cout << res << std::endl;

21     std::cin.get();

22   return 0;

23 }

 上面的实例,做的就是一个一个从1~5的累加过程。采用迭代器实现lambda函数。

 

 5. 函数包装器管理内嵌函数:

   对于这一个C++高级语法的作用:

    第一:  可以用作设计执行接口,接口设计关卡,也可以用来计数。

    第二: 可以内嵌到另一个函数,实现函数的内嵌。游戏开发中,经常使用到这种方法。

/* 函数包装器管理内嵌函数 */

/*

  以一个简单的四则运算为例子

*/

//#pragma warning(disable: 2064)

#include<stdio.h>

#include<iostream>

#include<functional>



template <typename T ,typename F>

   T run(T a , T b , F f) {

    

       return f(a , b);

 }



int main(int argc , char * args []){



    using std::function;

    double db = 12.9; //double *

    //加 减 乘 除

    function<double(double,double)> Add = [](double a , double b) {

        return a+b;

    };

    function<double(double, double)> Sub = [](double a, double b) {

        return a - b;

    };

    function<double(double, double)> Mul = [](double a, double b) {

        return a*b;

    };

    function<double(double, double)>Div = [](double a, double b) {

        return a / b;

    };

    //定义一个函数数组

    function<double(double, double)>p[]= { Add,Sub,Mul,Div };

    char str[] = "+-*/";

    int i = 0;

    for(auto fun : p )

    std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(12,13,fun) <<std::endl;

    std::cin.get();

  return 0;

}

运行结果如图:

C++ 高级语法学习与总结(代码实例)

当然对于函数包装器而言,还是可以调用外部函数的。不然怎么彰显它的高级二字。

 代码: 

 

 1 /* 函数包装器管理内嵌函数 */

 2 /*

 3   以一个简单的四则运算为例子

 4 */

 5 //#pragma warning(disable: 2064)

 6 #include<stdio.h>

 7 #include<iostream>

 8 #include<array>

 9 #include<functional>

10 

11 template <typename T ,typename F>

12    T run(T a , T b , F f) {

13     

14        return f(a , b);

15  }

16   double show(double  a, double  b) {

17 

18       std::cout << "这是一个外部函数,被调用" << std::endl;

19       return (a+b);

20   }

21 int main(int argc , char * args []){

22 

23     using std::function;

24     double db = 12.9; //double *

25     //加 减 乘 除

26     function<double(double,double)> Add = [](double a , double b) {

27         return a+b;

28     };

29     function<double(double, double)> Sub = [](double a, double b) {

30         return a - b;

31     };

32     function<double(double, double)> Mul = [](double a, double b) {

33         return a*b;

34     };

35     function<double(double, double)>Div = [](double a, double b) {

36         return a / b;

37     };

38     //定义一个函数数组

39     function<double(double, double)>p[]= { Add,Sub,Mul,Div ,show};

40     char str[] = "+-*/+";

41     int i = 0;

42     for(auto fun : p )

43     std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(12,13,fun) <<std::endl;

44     std::cin.get();

45   return 0;

46 }

C++ 高级语法学习与总结(代码实例)

你可能感兴趣的:(C++)