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 以及一个 围棋程序的更多相关文章

  1. C++11智能指针 share_ptr,unique_ptr,weak_ptr用法

    0x01  智能指针简介  所谓智能指针(smart pointer)就是智能/自动化的管理指针所指向的动态资源的释放.它是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动 ...

  2. 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), ...

  3. C++11——智能指针

    1. 介绍 一般一个程序在内存中可以大体划分为三部分——静态内存(局部的static对象.类static数据成员以及所有定义在函数或者类之外的变量).栈内存(保存和定义在函数或者类内部的变量)和动态内 ...

  4. C++11智能指针之std::unique_ptr

    C++11智能指针之std::unique_ptr   uniqut_ptr是一种对资源具有排他性拥有权的智能指针,即一个对象资源只能同时被一个unique_ptr指向. 一.初始化方式 通过new云 ...

  5. 【C++11新特性】 C++11智能指针之weak_ptr

    如题,我们今天要讲的是C++11引入的三种智能指针中的最后一个:weak_ptr.在学习weak_ptr之前最好对shared_ptr有所了解.如果你还不知道shared_ptr是何物,可以看看我的另 ...

  6. 详解C++11智能指针

    前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...

  7. C++11 智能指针

    C++ 11标准库引入了几种智能指针 unique_ptr shared_ptr weak_ptr C++内存管理机制是当一个变量或对象从作用域过期的时候就会从内存中将他干掉.但是如果变量只是一个指针 ...

  8. C++11智能指针

    今晚跟同学谈了一下智能指针,突然想要看一下C++11的智能指针的实现,因此下了这篇博文. 以下代码出自于VS2012 <memory> template<class _Ty> ...

  9. C++11智能指针的深度理解

    平时习惯使用cocos2d-x的Ref内存模式,回过头来在控制台项目中觉得c++的智能指针有点生疏,于是便重温一下.首先有请c++智能指针们登场: std::auto_ptr.std::unique_ ...

随机推荐

  1. Git基础篇

    对于Git的一些基础了解,安装,里面的一些名词,这里就不做介绍了.主要记录怎么使用GIt. 本篇介绍: 配置个人信息        生成本地仓库并与远程库相连        添加SSH秘钥       ...

  2. 用纯css改变默认的radio和checkbox的样式

    利用css的label的伪类(::before)代替checkbox和radio效果: 优点:需要图片来调整选中前和选中后的样式,纯css搞定 缺点:兼容性,IE8以下不支持 在线例子: css改变默 ...

  3. JNDI整理

    JNDI 什么是JNDI JNDI全称为Java Naming and Directory Interface,命名及目录查找接口,是java平台的一种标准扩展,它提供了一系列接口.类和命名空间的概念 ...

  4. HTML5一些标签和属性

    <bdo> 元素 可以覆盖默认文本的方向  根据dir 属性来控制文字的排序方向            属性:dir="rtl"                     ...

  5. Ubuntu安装MySQL及使用Xshell连接MySQL出现的问题(2003-Can't connect to MySql server及1045错误)

    不管在什么地方,什么时候,学习是快速提升自己的能力的一种体现!!!!!!!!!!! 以下所有的命令都是在root用户下操作(如果还没有设置root密码)如下: 安装好Ubuntu系统之后,打开终端先设 ...

  6. Navicat Premium Mac 12 破解

    破解地址:https://blog.csdn.net/xhd731568849/article/details/79751188 亲测有效

  7. 使用ansible安装配置zabbix客户端

    ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...

  8. Redhat 6.4 linux系统不重启识别热添加的硬盘方法

    1.1    选择虚拟机添加一块硬盘 1.2    查看系统当前磁盘信息 [root@zhongyi-test ~]# ls -l /dev/sd* brw-rw----. 1 root disk 8 ...

  9. 差点掉坑,MySQL一致性读原来是有条件的

    众所周知,在设定了隔离等级为Repeatable Read及以上时,InnoDB 可以实现数据的一致性读.换句话来说,就是事务执行的任意时刻,读取到的数据是同一个快照,不会受到其他事务的更新影响. 以 ...

  10. css样式 body的font-size 为什么用625%

    浏览器的默认高度?一般为16px. 为什么用62.5%作为body的默认样式?16px62.5%=10px.* 那么为什么一般多是 16px  *625% = 100px; <响应式Web设计实 ...