C++ 11 智能指针 lamda 以及一个 围棋程序
lamda表达式使用
char* p = "Hello world";
int ne = ,nl = ;
for_each(p,p+, [&](char i){ if(i=='e') ne++; if(i=='l')nl++; });
cout<<"e: "<< ne <<endl<<"l: "<<nl<<endl;
for_each 第三个参数 原来应该是函数
此处用lamda表达式完成
智能指针使用
我不知道循环右移如何使用智能指针
就在一个函数里面完成了循环右移
因为智能指针有以下功能
当智能指针本身被删除释放的时候(比如,离开了某个作用域),会使用给定的删除器释放它指向的对象
所以我在函数内使用了智能指针,希望函数结束,申请的空间自动释放
void move(int x){
auto s = unique_ptr <string>(new string("Hello world!"));
auto ss = s.get();
auto i = (*ss).end();
for_each (i-x%(*ss).length(),i,[&](char a){cout<<a;});
for_each ((*ss).begin(),i-x%(*ss).length(),[&](char a){cout<<a;});
}
以上两个作业我写在了一个文件中
#include<iostream>
#include <algorithm>
#include<string>
#include<memory>
using namespace std; void move(int x){
auto s = unique_ptr <string>(new string("Hello world!"));
auto ss = s.get();
auto i = (*ss).end();
for_each (i-x%(*ss).length(),i,[&](char a){cout<<a;});
for_each ((*ss).begin(),i-x%(*ss).length(),[&](char a){cout<<a;});
} int main(){
char* p = "Hello world";
int ne = ,nl = ;
for_each(p,p+, [&](char i){ if(i=='e') ne++; if(i=='l')nl++; });
cout<<"e: "<< ne <<endl<<"l: "<<nl<<endl; int x;
cin>>x;
move(x);
return ;
}
运行截图
围棋
1.写代码
看了大半夜 终于看懂这代码了
恢复棋步就是需要一下几个步骤
先把下的那个子去除 removeStone();
再把DeadGroup中的死棋拿出来恢复
再更新一下m_gmLastMove
public void playPrev(GoMove gm)
{
Point a = gm.Point; //先移除该棋子
Grid[a.X,a.Y].removeStone(); //判断是否有死棋 且不是自己作死的棋
if (gm.DeadGroup != null && gm.DeadGroupColor != gm.Color)
{
foreach (Point p in gm.DeadGroup)
{
Grid[p.X,p.Y].setNoKilled();
Grid[p.X, p.Y].setStone(gm.DeadGroupColor);
}
} m_gmLastMove = gameTree.peekPrev();
if (m_gmLastMove != null)
Grid[m_gmLastMove.Point.X, m_gmLastMove.Point.Y].setUpdated(); optRepaint();
return;
}
2.根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足
感觉这个程序写的很随意 一些类和方法都是什么构造出来但却不使用
不足有以下几点
1.有些函数作用不够清晰,或者说封装不合适
2.有些变量命名难以让人理解 如int m_n 乍一看还以为是一个不是很重要的变量 实际却是棋步数 而其他地方的棋步数却是seq 应该用m_seq比较合适
3.整个代码结构感觉混乱
4.错不处理不行
但是如果这是一个java大作业的话 我觉得已经可以接受了。
代码分析工具
这些警告太多了。。。就不一个一个更改了
我查看了一下主要分为几类
1.标示符大小写问题
2.标示符命名要有意义 别老是就m,n,i,j,k
3.丢失范围之前释放对象
4.尽量使用私有化成员
3.代码注释
已经上传github
C++ 11 智能指针 lamda 以及一个 围棋程序的更多相关文章
- C++11智能指针 share_ptr,unique_ptr,weak_ptr用法
0x01 智能指针简介 所谓智能指针(smart pointer)就是智能/自动化的管理指针所指向的动态资源的释放.它是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动 ...
- c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
c++11 智能指针 unique_ptr.shared_ptr与weak_ptr C++11中有unique_ptr.shared_ptr与weak_ptr等智能指针(smart pointer), ...
- C++11——智能指针
1. 介绍 一般一个程序在内存中可以大体划分为三部分——静态内存(局部的static对象.类static数据成员以及所有定义在函数或者类之外的变量).栈内存(保存和定义在函数或者类内部的变量)和动态内 ...
- C++11智能指针之std::unique_ptr
C++11智能指针之std::unique_ptr uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...
- 【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另 ...
- 详解C++11智能指针
前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...
- C++11 智能指针
C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针 ...
- C++11智能指针
今晚跟同学谈了一下智能指针,突然想要看一下C++11的智能指针的实现,因此下了这篇博文. 以下代码出自于VS2012 <memory> template<class _Ty> ...
- C++11智能指针的深度理解
平时习惯使用cocos2d-x的Ref内存模式,回过头来在控制台项目中觉得c++的智能指针有点生疏,于是便重温一下.首先有请c++智能指针们登场: std::auto_ptr.std::unique_ ...
随机推荐
- OpenACC例子
timeinfo1.c代码 #include<stdio.h> #define N 100 int main() { int A[N]; #pragma acc kernels { ; i ...
- Java后台-面试问题汇总(转载)
总结这些天面试Java开发过程中的大多数问题,综合分类有Java基础,框架,多线程,网络通信,Linux,数据库,设计模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答, ...
- css权值问题
继承是没有权值的,比通配符的的权值0还要低. 选择器是不分上下级的.只管优先级. 第一等:代表内联样式,如: style=””,权值为1000. 第二等:代表ID选择器,如:#content,权值为0 ...
- 在xampp修改密码
1.选择 服务器--账号--修改密码 2.在密码 一栏输入新密码 3.刷新页面会得到如下页面 此时,该页面提醒我们检查配置文件中的主机.用户名和密码 4.打开配置文件 路径为 xampp -> ...
- 【树链剖分 ODT】cf1137F. Matches Are Not a Child's Play
孔爷的杂题系列:LCT清新题/ODT模板题 题目大意 定义一颗无根树的燃烧序列为:每次选取编号最小的叶子节点形成的序列. 要求支持操作:查询一个点$u$在燃烧序列中的排名:将一个点的编号变成最大 $n ...
- 继续分享shell 之变量使用
变量类型 运行shell时,会同时存在三种变量: 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 2) 环境变量 所有的程序,包括 ...
- 安装破解IDEA(个人使用)
安装的过程,许多的教程都会有,我在这里附上一两个链接吧:https://blog.csdn.net/newabcc/article/details/80601933 他这里也有破解过程,但是比较麻烦, ...
- MySQL的隐式类型转换整理总结
当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion). 比如下面的例子: 1 2 ...
- day1_作业2(三级菜单)
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- province={'江苏省':['南京市','苏州市','无锡市'],'浙江省':['杭州市','温州 ...
- java多线程批量读取文件(七)
新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一 ...