关于容器输出的进一步优化
以前我讨论过了在自己学习过程中经常要用到的一个特性,就是容器的输出问题,总感觉不是太方便,在学习过程中用的又非常多,我曾经在《 学了模板再来看容器输出的简化》 中已经把他处理的很简单了,不过最近看了 TC++PL受了点启发,又将程序进一步改进,主要的好处是更符合标准库容器的使用习惯,以首尾两个迭代器为输入,而且对普通的数组也可以使用,这样最大的方便之处在于可以接受一个范围的输出了。不过比起以前那种直接传递容器的引用来说,普通的输出整个容器使用上还是复杂一点。
以前我讨论过了在自己学习过程中经常要用到的一个特性,就是容器的输出问题,总感觉不是太方便,在学习过程中用的又非常多,我曾经在《 学了模板再来看容器输出的简化》 中已经把他处理的很简单了,不过最近看了 TC++PL受了点启发,又将程序进一步改进,主要的好处是更符合标准库容器的使用习惯,以首尾两个迭代器为输入,而且对普通的数组也可以使用,这样最大的方便之处在于可以接受一个范围的输出了。不过比起以前那种直接传递容器的引用来说,普通的输出整个容器使用上还是复杂一点。
而且,我还持有这样的观点,
Cpp 必须被摧毁 —Bjarne Stroustrup
全世界有经验的程序员都教导我们,应该多用C++中的特性,不要再停留在C语言中某些特别容易导致错误的旧特性,其中,预处理就是特别典型的一个,D&E中Bjarne Stroustrup详细解释了他为预处理提供的各个替代措施,但是,偏偏就是有人这么无聊,就是还喜欢用!比如windows.h中,一个特别特别无稽的使用宏去定义max(),min(),用宏就算了,竟然全部用的都是小写!我简直想拆了微软!因为很明显这样做是非常愚蠢的!比如下面这样一个简单的利用例子,因为包含了windows.h而无法运行。
这是一个C++模板,用于输出任意数据类型的大小和取值范围,方便在不同平台或编译器下检查类型信息。
通过学习C/C++的经历,深刻体会到:学习编程应直接阅读经典,而非普通教材,这样才能避免走弯路,真正掌握知识。
原以为一个以前在C中轻易实现的猜数字游戏即便我加了一些奇怪的规则,还应该是非常简单就能实现的,但是,我忽略了C/C++ 中大整数带来的复杂性,的确,当整数范围超过long所能表示的范围以后,简单的四则运算或逻辑比较都是需要很复杂的代码才能实现。我在问题(3)就开始要解决一个这样的问题,似乎已经违背了我当初设想的从易到难写C++程序的目标了,但是,因为我对C++的了解程度,自然也很难真的说(或者对不同的人也不一样的)从易到难。但是因为太多方案在头脑中,所以先把问题提出来吧,假如有人来看,各取所需吧,我的解答自然不可能一下子出来,目前,我的想法是,实现一个稍微实用一点的大整数类库,以我的水平,自然不能多么完善,但希望这个类库能伴随我以后解决自己为自己提出的各种刁钻问题,目标自然很明确,让大整数的使用像内置类型一样!哪怕是多么大的天文数字!呵呵,目标而已,目标而已。
本文分享了一个C++字符串逆序输出的方法。通过使用vector和反向迭代器,并结合noskipws读取输入,实现了简洁高效的解决方案。
要求符合矩阵的各种运算规则,有标准库的各种功能,因为矩阵主要进行数值计算,所以只需要满足int,long,float,double的储存即可。
24点游戏就是先抽出4张牌,然后通过加减乘除计算24的游戏,要求游戏可以实现计时,限定时间,计算机输出结果等多种功能。输出结果最好是通过上题中类似的扑克图形方式输出。
要求,输出一副扑克中抽出的4张牌,以<>表示方块,%表示梅花,&表示红心,^表示黑桃,按类似下面的方式输出:最好在同一排输出4张扑克。
*********************
* <>5 *
* *
* *
* *
*********************
因为在问题(3)中需要解决这个随机数产生的问题,我感觉还比较复杂,当然光是需要产生一个普通的整数还是比较简单,但是有的时候不仅仅是需要这样。现在实现以下几个要求,为这个类定义一些接口。目前只要求所有产生的都是整数。
1,RandCreater(int i) 在 0~i 范围内
2,RandCreater(int i,int j)在i~j范围内
3,RandCreater(LargeInt linta)在0~ivec范围内 LargeInt的意义见问题(4)
4,RandCreater(LargeInt linta, LargeInt lintb) 在linta~lintb范围内
5,产生的数有两种形式,(1)可以是内置类型的int,(2)也可以产生问题(4)定义的LargeInt。
暂定接口,觉得不适合可以更改。