zoukankan      html  css  js  c++  java
  • 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++关于款字符的使用:

       

     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;
    }

    运行结果如图:

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

     代码: 

     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 }

  • 相关阅读:
    CSS3学习-用CSS制作立体导航栏
    JS学习-事件响应小结-简单的计算器
    BOM学习-javascript计时器小结
    php 正则表达式
    zTree插件的应用
    css样式篇
    iso移动端input的bug解决(vue)
    html2canvas文字重叠(手机端)
    react中使用antd遇到的问题
    react开发初始配置和一些问题
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4375791.html
Copyright © 2011-2022 走看看