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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM