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 ...
随机推荐
- easyui combobox级联(转载)
一.创建combobox 有如下几种方式可以创建一个combobox 1.使用select标签,并加上class="easyui-combobox",这种方式比较适用于静态的选项. ...
- Java实现堆排序(大根堆)
堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键 ...
- 个人对AutoResetEvent和ManualResetEvent的理解(转载)
仅个人见解,不对之处请指正,谢谢. 一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方 ...
- iOS10 app连接不上网络的问题
http://jingyan.baidu.com/article/29697b917f2069ab20de3c33.html
- git设置hooks 钩子
github是可以设置hooks的,看:在设置webhooks & services,可在Just the push event.是设定向你的服务器发请求,然后再做相应的处理. https:/ ...
- 我的新发现:AVL树旋转的一个特性
关于AVL树旋转的代码网络上铺天盖地. 一些经典的实现方法如下: AVLTree SingleLeftRotation(AVLTree A) { AVLTree B = A->left; A-& ...
- IO/ACM中来自浮点数的陷阱(收集向)
OI/ACM中经常要用到小数来解决问题(概率.计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制. 以下以GUN C++为准,其他语言(或编译器)也差不了多少 ...
- Hadoop实战5:MapReduce编程-WordCount统计单词个数-eclipse-java-windows环境
Hadoop研发在java环境的拓展 一 背景 由于一直使用hadoop streaming形式编写mapreduce程序,所以目前的hadoop程序局限于python语言.下面为了拓展java语言研 ...
- logback文章推荐
logback 配置详解:http://www.cnblogs.com/zhuawang/p/4002975.html Logback 日志输出到 mysql:http://www.codeweblo ...
- Linux VFS中write系统调用实现原理【转】
转自:http://blog.chinaunix.net/uid-28362602-id-3425881.html 目录 用户空间的write函数在内核里面的服务例程为sys_write Vfs_wr ...