C++ 高级语法学习与总结(代码实例)
C++11增加了许多的特性,auto就是一个很明显的例子。 还有就是typedid()获取数据变量的类型
看下面简短的代码:
atuo: 很像java中的加强for循环....。
//获取一个数据变量的类型
#include<iostream>
#include<stdlib.h> int main() { double db = 10.9;
double *ps = &db;
auto var =*ps;
std::cout<<typeid(var).name()<< std::endl;
getchar();
return ;
}

关于C++关于款字符的使用:
//关于宽字符的使用
#include<iostream> #include<stdlib.h>
#include<locale> int main(int argv ,char args []) { setlocale(LC_ALL, "chs"); //这就是设定为本地,中文简体
wchar_t * p2 = L"1234frd";
std::wcout << p2 << std::endl;
wchar_t *pi = L"北京adas,你好!";
std::wcout << pi <<std::endl; getchar();
return ;
}
关于数组类型的使用:
//新数组的使用
#include<iostream>
#include<array>
#include<stdlib.h> int main(int argv ,char args []) { //array数据类型 std::array<double ,>data={,,,,};
for (auto var : data) {
std::cout << "var =" << var << std::endl;
}
getchar();
return ;
}
对于这里,我们需要知道的是,array的建立实在栈的基础上,所以最大尺寸不要大于1M ,不然会出现栈溢出。
而对于vector而言,是建立在堆上的,所以没有溢出的说法。
4, C++新特性,lambda表达式(匿名函数)
//新数组的使用
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdlib.h> int main(int argv ,char args []) { std::vector<int> myvec;
myvec.push_back();
myvec.push_back();
myvec.push_back();
myvec.push_back();
myvec.push_back();
int res = ;
//lambda 表达式 求和
//&res直接操作一个变量,res等价于返回值,x代表参数
//每次充当迭代器指向的元素,大括号就是代码
std::for_each(myvec.begin(), myvec.end(), [&res](int x) {res += x; });
std::cout << res << std::endl;
std::cin.get();
return ;
}
上面的实例,做的就是一个一个从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 = ;
for(auto fun : p )
std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(,,fun) <<std::endl;
std::cin.get();
return ;
}
运行结果如图:

当然对于函数包装器而言,还是可以调用外部函数的。不然怎么彰显它的高级二字。
代码:
/* 函数包装器管理内嵌函数 */
/*
以一个简单的四则运算为例子
*/
//#pragma warning(disable: 2064)
#include<stdio.h>
#include<iostream>
#include<array>
#include<functional> template <typename T ,typename F>
T run(T a , T b , F f) { return f(a , b);
}
double show(double a, double b) { std::cout << "这是一个外部函数,被调用" << std::endl;
return (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 ,show};
char str[] = "+-*/+";
int i = ;
for(auto fun : p )
std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(,,fun) <<std::endl;
std::cin.get();
return ;
}

C++ 高级语法学习与总结(代码实例)的更多相关文章
- Swift高级语法学习总结(转)
Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...
- Swift高级语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...
- javascript高级语法学习
可维护的代码意味着: 可读的 一致的 可预测的 看上去就像是同一个人写的 已记录 命名函数表达式 (function fn(){}) 他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含 ...
- 大数据之scala高级语法学习
协变 案例一: class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} // ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- 深度学习之卷积神经网络CNN及tensorflow代码实例
深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...
- PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]
PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解] 利用反射来实现工厂模式的生产而无需创建特定的工厂类 本文地址http://janrs.com/?p= ...
- iOS开发——语法篇OC篇&高级语法精讲二
Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...
- javascript高级实战学习
学习目标: - 理解面向对象开发思想 - 掌握 JavaScript 面向对象开发相关模式 - 掌握在 JavaScript 中使用正则表达式 - typora-copy-images-to medi ...
随机推荐
- VMware workstaion上传虚拟机到VMware EXSI 5.5
1.首先在VMware Workstation 文件 --- 连接VMware EXSI5.5服务器. 2.输入VMware EXSI 5.5服务器地址.用户名和密码. 3.右键Windows 7 ...
- AndroidStudio第一个项目HelloWorld
实验内容 在Android Studio中创建项目 创建并启动Android模拟器 项目的编译和运行 实验要求 在安装好的AndroidStudio上建立第一个工程 创建并启动Android模拟器 编 ...
- sprint3终极演示
目标功能: 已实现功能: 首页.订单.资料界面 首页.订单.资料按钮 化妆师.化妆品.化妆视频按钮 化妆师.化妆品的详细分类 化妆师.化妆品的详细信息显示 化妆师的预约按钮和联系按钮 化妆品的购买按钮 ...
- UNIX操作系统和Linux操作系统介绍
UNIX操作系统(尤尼斯),是一个强大的多用户.多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson.DennisRitchie和DouglasMcI ...
- Form 数据库的顺序
form buidler 中数据库的上下排列顺序也很重要,开发中无心把LINE的数据块放在HEADER数据块之上, 导致在新增数据的时候先去insert LINE数据块(没有生成HEADER_ID的 ...
- 迭代器和for-of
在ES5及之前的JS标准中,我们习惯了用for(var i = 0; i < Array.length;i++){//TODO}或者是for(var index in Array){consol ...
- POJ - 1132Border
POJ - 1132Border Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Descrip ...
- delphi的webBrowser操作HTML研究
测试例子: 外网电脑D:\TEST\delphiTest\webbrowsetest 参考文档: delphi 操作WebBrowser 元素值 http://hi.baidu.com/kinglik ...
- 如何在page_load方法判断是服务器端控件引发的page_load方法
动态获取单击的服务器端控件的id值 private string getPostBackControlName() { Control control=null; s ...
- 关于input内容监听(change)
js的话利用input的onchange事件 而jquery的话利用change()函数,代码如下: <!DOCTYPE html> <html> <head> & ...