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_ ...
随机推荐
- pyinstaller打包后的exe退出时,类中的__del__不执行问题
关于pyinstaller打包后的exe退出时,类中的__del__不执行问题,完善中
- 清除ie10+浏览器的input输入框后面会出现的x号和闭眼logo
x号:::-ms-clear{display:none;} 闭眼logo: ::-ms-reveal{display:none;} tips:如果在外部引用的css里面没有作用,可以在写本页面的< ...
- EBS补丁时遇到的问题
今天在给R12.1.3打17525552的时候,出现了这样的一个错误 ATTENTION: All workers either have failed or are waiting: FAILED: ...
- 使用session处理用户搜索后数据的上一页和下一页跳转
搜索语句界面: /*单一检索:此处为一个下拉列表的检索*/ if(isset($_POST['submit']) && $_POST['submit'] == '点击搜索') { if ...
- JS底层挖掘
//Promise版本的Ajaxconst getJSON = function(url) { const promise =new Promise(function(resolve, reject) ...
- scrapy--ipproxy
不要急于求成,你只要做的是比昨天的你更优秀一点 --匿名 今天给大家讲一下--IpProxy,由于从"http://www.xicidaili.com/nn"爬取,以下是我转载的博 ...
- 【转载】Callable、FutureTask中阻塞超时返回的坑点
本文转载自:http://www.cnblogs.com/starcrm/p/5010863.html 案例1: package com.net.thread.future; import java. ...
- Python学习第一弹
开发语言: 高级:Python.java.PHP C# GO ruby C++ ——>字节码 低级:C.汇编 ...
- python基础之模块part2
sys: sys模块不同于os模块,这个是跟Python解释器打交道的. sys.argv:返回一个文件名开头,包含后面输入内容的 列表 import sys res = sys.argv print ...
- scrapy进行分布式爬虫
今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一 ...