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_ ...
随机推荐
- logistic regression (逻辑回归) 概述
:http://hi.baidu.com/hehehehello/blog/item/0b59cd803bf15ece9023d96e.html#send http://en.wikipedia.or ...
- IIS无法识别的属性targetFramework
出现这种错误是因为发布网站时iis的应用程序池默认使用的是.net framework v2.0.50727.4927,而开发的网站用的是.net framework 4.5,所以会出现这种错误. 我 ...
- 第43章 RTC—实时时钟—零死角玩转STM32-F429系列
第43章 RTC—实时时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...
- 阅读detection
关于detecion的几篇文章,感觉有必要系统学习一下,并记录一下了,最近看书比较多,文章看得少,赶紧看看吧. FPN:Feature Pyramid Networks for Object Dete ...
- 5分钟带你入门Redis
转载请标明出处: http://blog.csdn.net/forezp/article/details/61471712 本文出自方志朋的博客 1.redis概述 redis是一个开源的,先进的 k ...
- checkboxlist如何配置数据源?
在做项目中,通常checkboxlist中的checkitems不是固定的,需要绑定可变的数据源,把数据添加到list集合中,代码如下 DataSet myData = new DataSet(); ...
- cocos2dx 修改亮度、对比度、色调、饱和度
废话少说,直接修改CCSprite使用的片面着色器ccShader_PositionTextureColor_noMVP.frag: /* * cocos2d for iPhone: http://w ...
- Json数据常用操作
JSON字符串: var str1 = '{ "name": "cs", "sex": "man" }'; JSON对象 ...
- python-无参函数
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- ''' #-----------定义函数---------- def func1(): "te ...
- 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法
一.总体思路: 在控制器中,每次拿到数据模型(请求了数据.加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, ...