自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

redAnt的博客

有梦想,爱学习,实力派

  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++抽象编程——接口总结——随机库代码

我们通过学习random.cpp的代码,主要目标不是为了掌握所有其的复杂性。我们希望做的是知道为什么作为random.h的客户不要了解所有这些细节。 random.cpp中的代码是微妙的,并且包含许多潜在的陷阱,这些陷阱可能会阻碍那些试图从头开始实现这些功能的随意程序员。库接口的主要目的是隐藏这种复杂性。 举个例子,墙可以保护客户免受中世纪地图上可能被标记为“Here Be Dragons”的各

2017-04-30 15:20:18 1294 2

原创 C++抽象编程——接口(6)——设置随机数种子

初始化随机数种子还记得吧,我上篇说过,多运行几次程序试试,会发现什么?我们就能发现,前面部分函数,就是randomInteger,randomReal和randomChance函数的实现并不完全符合客户想要的方式。问题在于,远远没有产生不可预测的结果 - 使用它们的程序总是产生完全相同的结果。 例如,如果你连续运行二十次Craps程序,则每次都会看到完全相同的输出。 为了找出这种原因,我们回到我们

2017-04-30 14:41:00 3900

原创 C++抽象编程——接口(5)——随机数算法

验证接口设计的最好方法是编写使用它的应用程序。例如,图2-12中的程序使用randomInteger函数来演示叫做craps的赌场游戏。 这个程序播放叫做craps的赌场游戏,它使用一对骰子玩。在游戏开始的时候,你掷骰子并计算总数。如果你的第一次是7或11,你赢得了赌徒所说的“natural”。如果你的第一次是2,3或12,你会输掉,原因是“crapping out”。在任何其他情况下,从第一次的

2017-04-27 21:01:13 887

原创 C++抽象编程——接口(4)——随机接口的设计

说明接口设计原理的最简单的方法是进行简单的设计练习。 为此,我们就来介绍一个能产生随机数的接口 random.h接口的设计过程,这样可以编写看似随机选择的程序。能够模拟随机的行为是有必要掌握的,例如,你想编写一个涉及翻转硬币或滚动骰子的电脑游戏。但在更实际的情况下也是有用的。模拟这种随机事件的程序称为非确定性程序(nondeterministic programs) 让计算机以随机方式运行涉及一定

2017-04-27 12:17:12 1684

原创 C++抽象编程——接口(3)——接口设计的重点

编程困难的原因之一是程序反映了底层应用程序的复杂性。 只要计算机用于解决日益复杂的问题,编程过程也将变得越来越复杂。 编写一个程序去解决一个很大或困难的问题,迫使你管理一个惊人的程序的复杂程度。不仅仅有算法设计,还有特殊情况要考虑,以及是否满足用户要求,最后注意无数的细节才能正确。为了使编程易于管理,我们必须尽可能地减少编程过程的复杂性和功能的复杂性。库(library)的设计使得编程复杂性降低,

2017-04-25 18:52:20 1403

原创 C++抽象编程——接口(2)——接口的用途

我们建立了一个接口,但是我们为什么要建立接口?它有什么用呢?我们写在同一个文件里不是更好吗?为什么要那么麻烦?接下来我们就慢慢的探讨吧。出口数据类型(Exporting types)前面部分中描述的error.h接口只是导出一个函数,没有其他的。 以后我们将在C++中使用的大多数接口还导出数据类型。这些类型中的大多数将是类,它们是C++提供的面向对象类型系统的基础。鉴于我们刚刚了解这些,我们就先不出

2017-04-24 21:03:54 2492

原创 C++抽象编程——接口(1)——.h文件与.cpp文件的建立

在我们之前写过的程序中,都有这一句:#include <XXX>其中的< XXX >就是一个库。那么这里面到底包含了什么呢?这又是怎么实现的呢?接口与实现(Interfaces and implementations)当我们在C++中定义库时,需要提供两个部分。首先,我们必须定义接口(interface),它提供了客户端使用库所需的信息,但我们要注意留出关于库如何工作的详细信息(即注释)。 其次,要

2017-04-24 12:44:43 3156

原创 C++抽象编程——递归策略(3)——生成排列数(2)

课本的原本代码上次我们讲完了生成排列数的原理C++抽象编程——递归简介(3)——生成排列数(1),那么我们接下来就是实现它了。在这篇的前一篇我特意去提了一下foreach语句,就是因为这个文章涉及到。那么我们先看看书上的代码:#include <iostream>#include "set.h"#include "simpio.h"using namespace std;/* Functio

2017-04-22 17:10:35 1224

原创 C++抽象编程——递归策略(3)——foreach语句的简单实现

我想,foreach循环大家都不会陌生,但凡熟悉一点高级的语言的人都是很熟悉的。它遍历每一个元素,并且对它进行处理,方便了很多。我第一次接触foreach的时候,是我在大一的时候学习的C#接触的。很可惜,在java跟C#中都有的这样的方便工具,但是C++是没有的(虽然在C++11中添加了for_each语句,详细用法看: C++抽象编程——STL实战(2)——查找与修改,但是我感觉用法上没那么方便)

2017-04-22 16:17:31 1107 1

原创 C++抽象编程——递归策略(3)——生成排列数(1)

排列数简介许多文字游戏和谜题需要重新排列一组字母来形成一个单词。因此,如果想编写一个拼字游戏程序,设置一个可以产生一组特定的组合的单词的所有可能的排列是有用的。 在文字游戏中,这样的安排通常被称为变位词(anagrams)。 在数学中,它们被称为排列(permutations)。 假设你想写一个函数:set<string> generatePermutations(string str);用来返回

2017-04-21 00:20:02 1343

原创 C++抽象编程——递归策略(2)——子集和问题

虽然Hanoi塔为递归的强大提供了很好的例证,但其作为一个例子,它有效性却受到缺乏实际应用的影响。策略之所以被许多人应用到编程中,是因为它能够解决很多实际问题。如果递归的唯一例子就是像Hanoi塔一样(很容易得出结论),那么递归就仅仅仅是用于解决抽象谜题。但是没有什么东西会离事实很远。其实递归策略为实际问题提出了非常有效的解决方案(最有代表性的是我们以后讲到的的排序问题,因为这一类问题很难以用其他方

2017-04-19 21:57:58 3338

原创 C++抽象编程——递归策略(1)——汉诺塔问题(2)

验证汉诺塔策略(Validating the strategy)尽管伪代码策略看起来是正确的,但到目前为止的我们的推导却显得有点粗心。无论何时使用递归分解问题,必须确保新问题的形式与原始文件相同。我们将N-1个磁盘从一根针移动到另一个跟针的任务肯定听起来像是同样问题的,适合moveTower原型。 即使如此,这里有一个微妙但重要的区别:在原始问题中,目的地和临时针是空的。当我们将N-1大小塔移动到临

2017-04-17 23:45:04 1271

原创 汇编知识复习总结——基础知识

突然就想着写点汇编的东西,可能是C++系列写累了,想换个口味吧。我们汇编目前只是在学习阶段,应该这个学期能学完。我在想我就应该边学变总结,所以接下来的所有的汇编的文章都是自己的总结跟笔记,用于考试月复习用。包括了一些课后习题,一些知识点的总结。我主要是东西会乱丢,写在纸上很快就不见了,干脆就写在自己的博客上了。第一章的知识比较简单,所以就直接写这里了。基础知识**寄存器:**CPU中可以储存数据的

2017-04-16 23:51:53 935

原创 C++抽象编程——递归策略(1)——汉诺塔问题详解(1)

汉诺塔(The Towers of Hanoi)这个系列的第一个例子是一个简单的谜题,被称为汉诺塔(Towers of Hanoi)。19世纪80年代由法国数学家Edouard Lucas发明的Hanoi难题塔在欧洲迅速普及。它的成功部分原因是由于法国数学家Henri De Parville(由数学历史学家W. W. R. Ball翻译)在La Nature中描述的这个谜题古老的传说(为了保证传说的

2017-04-16 15:01:03 3694

原创 C++抽象编程——递归策略——前言

接下来总结的就是递归的核心内容——递归策略(Recursive Strategies),本来我是想接着递归简介就写这个的,但是书本上的很多例子都是利用STL实现的,正如我在STL的心得中讲的,那本书上的很多出口的方法都是它们学校自己的接口提供的,我们要自己去实现。其实我也没想到STL会包含那么多的知识点而已。那个系列确实是写了很多,也很久。但是在另外一个方面,我收获也是不少。 终于可以动手去写这个

2017-04-16 13:31:26 512

原创 C++抽象编程——STL实战(5)——map在数据文件查找中的应用

介绍完了数据文件的基本操作,我们就要来试试怎么用STL中的map集合来处理一些文本文档。首先我们来看一道题目:如果你经常飞行,您可以快速了解,世界各机场都有国际航空运输协会(IATA)分配的三字母代码。例如纽约市的肯尼迪机场(John F. Kennedy),字母代码JFK。 然而,其他代码难以识别。大多数基于网络的旅行系统提供了一些查询这些代码作为其客户服务的方法。假设你被要求编写一个简单的C +

2017-04-14 00:14:33 1376

原创 C++抽象编程——如何修改map中的值

思路的由来刚刚在写一个程序,要用到将map中的值给改变,但是那是书本上提供的put()函数(我记得java好像也提供这一类的函数吧),我们的C++并不具有这样的功能,所以我便去搜索了一下大家的建议,发现确实是没有这个函数,要实现还是得自己来。我看的最多的还是说:先用eraser函数擦除,然后我们再进行赋值。没错我一开始我也是这样去想,也打算这样子去做的。就当我准备操作一番的时候,我在C++的网站上看

2017-04-13 22:52:18 24555 6

原创 C++抽象编程——字符串与整数之间的相互转换详解

鉴于文件和字符串都是字符序列,似乎有理由认为编程语言可能允许我们同样的地对待它们.C ++通过< sstream >库提供了这种功能,该库导出了几个类,允许将流与一个字符串值与< fstream >库允许将流与文件关联的方式大致相同。 istringstream类是ifstream的对应物,可以使用流操作符从字符串读取数据。对于输出,ostringstream类非常像流,除了输出被定向到一个字符串而

2017-04-13 14:50:22 3397

原创 C++抽象编程——数据文件的各种输出方式

接下来我们就从几个方面来谈谈数据文件的输入输出。单个字符的输入输出(Single character I/O)在许多应用程序中,处理文本文件中数据的最佳方式是通过对文件的内容一次读取一个字符。C++库中的输入流支持使用get方法读取单个字符,该方法返回流中的下一个字符。 虽然使用get方法的想法很简单,但是在设计中有一个令人困惑的方面。如果你看看get的原型,你会发现它看起来像这样:int get

2017-04-13 00:52:20 1923

原创 C++抽象编程——数据文件的基本操作

熟悉对文件的基本操作可以让我们更加深入的了解C++的强大。我们先介绍一下数据文件的基本操作,然后尝试用STL的一些方式来对它进行处理。文件及其结构无论何时当我们在计算机上存储信息超过程序的运行时间,通常的方法是将数据收集到一个地方,将其作为文件存储在永久存储介质上(就是说某些信息我的程序暂时不用了,但是以后可能还要用,我们就先把它当做文件储存起来)。通常,使用磁性或光学介质存储文件,例如安装在计算机

2017-04-11 16:33:31 1973

原创 C++抽象编程——STL实战(4)——计算集合的交集,并集及区别

我记得我们在集合的Set类中,只是探究了怎么去往集合里添加跟删除元素,当然我们利用了集合的性质去做到移除重复的元素(详情见我的博文C++抽象编程——STL(5)——剔除重复元素),当然我们还可以直接用算法库里面的unique函数直接去除(详情见我的博文C++抽象编程——STL实战(2)——数组元素的移除与合并)。但是我们仅仅知道集合的插入跟删除是没有太大意义的,我们重点知道,集合就一定有交集跟并集(

2017-04-11 00:15:49 2408

原创 C++抽象编程——STL实战(3)——数组元素的移除与合并

在STL中,对元素的插入跟移除也是对比数组的一大改进,这次我们就重点讨论一下怎么样在STL中移除跟合并元素。这里的所有方法都要导入头文件 < algorithm >实例一:移除指定与特定的值出口的方法:remove(first,last,value)remove_if(first,last,value)关于参数的解析与返回的类型值,参考我上一篇的博文C++抽象编程——STL实战(2)——查找与修改

2017-04-10 22:34:35 2957 1

原创 C++抽象编程——STL实战(2)——查找与修改

工欲善其事必先利其器,那么我们现在说说我们强大的< algorithm >库,一个强大的算法库,提供了我们极为方便的处理方式。虽然我们现在只是学会怎么使用,过完这个内容我们就说怎么实现这些功能,我在说这些算法的时候,我也会放上函数模板的,但是不会去分析。我们重点看看怎么使用。这里的所有方法都要导入头文件 < algorithm >find()目的: 在一定范围内找寻某个值函数模板:template<

2017-04-07 23:34:01 1053

原创 C++抽象编程——STL实战(1)——迭代器详解

这篇博文我来谈谈迭代器(Iterator)——这个在STL中频频出现的专业词汇,为什么可以如此的重要。为此我不敢百度,因为我看了百度百科,但是很可惜答案我还是不满意,去维基了一下,中文版跟英文版相差太多了,这使得我又不得不硬着头皮去看英文版,接下来的大多数的内容都是来着自于wikipedia,我只是自己经验加上总结,对于C++的看法。要详细版的就点这个:https://en.wikipedia.or

2017-04-07 21:04:52 2031

原创 我的STL学习反思及心路历程

到这篇就等于是STL的基础用法介绍完了,我本来打算说就继续写一些STL的运用实例的。但是想了想还是写篇自己这段时间来总结STL的一些心得吧。 说实话我这段时间并没有做到自己说的每日一更新,但是并不是我懒,我预期的是,我可以根据《programming abstraction in C++》这本书的介绍讲完STL。但是很可惜,这本书出口的方法,是放在他们学校自己的一个库文件里面的。就比如他们的vec

2017-04-07 11:07:43 1621

原创 C++抽象编程——STL(6)——map类的简单使用

The Map class这次我们谈谈另一个称为map的集合,这个集合概念上类似于字典。我们的字典允许你查找一个字然后来找到它的意思。map是该概念的概括,其提供了称为密钥(kye)的识别标签和相关联的值之间的关联,其可以是更大和更复杂的结构。在字典例子中,key是你正在查找的词,value是它的定义。map在编程中有很多应用。例如,编程语言的解释器需要能够为变量分配值,然后可以通过名称引用值。ma

2017-04-05 22:31:16 1304

原创 C++抽象编程——STL(5)——剔除重复元素

本来今晚不打算写了的,但是在刚刚写完set集合的时候,我就一直有个想法,但是忘了是什么,就在我刚刚洗澡的时候我突然想起来了set集合的一个妙用。没错,就是我标题了。 我在C++抽象编程——STL(5)——set集合的基本输入输出说过set集合的概念:元素是无序的且其值只出现一次,这里我们注意后半句,其值只出现一次!!。所以我在想,如果我们把剔除的字符串或者数组,直接把他装进我们的set里面,那么重

2017-04-04 22:24:31 2501

原创 C++抽象编程——STL(5)——set集合的基本输入输出

the Set class还有一个最有用的集合类,就是set(集合)类了,出口的方法如下图,这个类我们用来模拟数学上的集合,也就是说这个类里的元素是无序且其值只出现一次。set类在许多算法应用中是极其有用的。所以我们应该从一些实例中去体验和感受它们是怎么工作以及为什么在程序中如此有用。 先介绍一下set的常见的方法: 在这里我们再也不是用我们熟悉的pop跟push(push_back)函数来

2017-04-04 18:53:28 17894 1

原创 C++抽象编程——STL(4)——vector中的排序和其他存储方式

其他类型的vector存储方式前面我们一直都是介绍的vector用来装int类型的数组,那么既然是容器,就不可能只能装一种东西,我们就举个实例来看看vector怎么装其他的类型的数据:#include <iostream>#include <vector>#include <string>using namespace std;void outputValue(vector<string>

2017-04-01 23:59:04 997

原创 C++抽象编程——STL(4)——建立二维的vector

在介绍vector的引用传递之前,我想先介绍一种特殊的声明vector的方式:Vector类中使用的类型参数可以是任何C++类型,并且本身可以是参数化类型。例如,我们可以通过声明一个Vector的基础类型本身就是一个Vector来创建一个二维结构。就像这样:vector< vector<int> > sudoku(9, vector<int>(9));这个代码理解起来有点复杂,我们可以这样看:将ve

2017-04-01 23:28:10 1360

Prog-in-Cpp,完整版

这是斯坦福大学的C++教材,里面包含了C++的入门语法还有C++版本的数据结构。里面的内容很经典,属于经典的教材。让你知其然又知其所以然。强烈推荐

2017-09-04

Programming Abstractions in C++

Programming Abstractions in C++ Stanford大学的c++教材,感觉不错

2017-01-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除