C++ 高级语法学习与总结(代码实例)
时间:2022-05-06
本文章向大家介绍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 }
- 暑假集训之专题----拓扑排序题解
- 李沐:从头开始介绍机器学习,眼花缭乱的机器学习应用
- hdu------2488Tornado(几何)
- nyoj------203三国志
- nyoj 115------城市平乱( dijkstra // bellman )
- hdu----(1847)Good Luck in CET-4 Everybody!(简单巴什博奕)
- hdu----(3118)Arbiter(构造二分图)
- hdu----(1528)Card Game Cheater(最大匹配/贪心)
- hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)
- hdu----149850 years, 50 colors(最小覆盖点)
- hdu------1281 棋盘游戏(最小覆盖点)
- hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)
- hdu-----(1151)Air Raid(最小覆盖路径)
- hdu-----(1150)Machine Schedule(最小覆盖点)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
- OpenGL ES 变量、结构体、语句、函数、精度
- OpenGL ES for Android 绘制矩形和正方形
- OpenGL ES for Android 绘制立方体
- 服务化最佳实践
- OpenGL ES for Android 深度测试
- OpenGL ES for Android 绘制旋转的地球
- [Hei.Captcha] Asp.Net Core 跨平台图形验证码实现
- Asp.Net Core 3.1 获取不到Post、Put请求的内容 System.NotSupportedException Specified method is not supported
- OpenGL ES for Android 播放视频
- Centos 7 在线安装 离线安装 最新 Docker-compose 的正确姿势 实践笔记
- OpenGL ES for Android 视频缩放、旋转、平移
- OpenGL ES for Android 相机预览
- OpenGL ES for Android 相机预览适配不同分辨率的手机
- Flutter Widgets 之 Container