【Thinking C/C++】
文章平均质量分 78
松子茶
关注数字图像处理,数据隐藏与信息隐藏,计算机视觉和机器学习...
展开
-
【CS107】Assignment 3 C语言中vector与hashset的实现
实现部分(vector.c)和(hashset.c),用的windows操作系统,装了个minGW用make进行编译链接,可以通过vector-test, hashset-test, 和thesaurus-look的测试:#include "vector.h" #include #include #include #include static void原创 2013-04-13 19:08:03 · 2054 阅读 · 0 评论 -
【CS107】Assignment 2 总结
programming paradigms的assignment 2很有意思,满足了我对电影和编程学习的双重爱好,可惜的是,它需要unix环境,在windows中用minGWf编译都不成,很是郁闷,难道硬要我装个linux不成?所以我只能小小尝试,却不能享受最后程序运行的快感。编程过程中碰到个难题,就是它有个void* actorFile指向一长串raw data空间,结构的话,我贴个作业中截原创 2013-04-09 18:29:53 · 1946 阅读 · 0 评论 -
【软件设计】模拟经典游戏超级玛丽实现
这个程序模拟的红白机上的经典游戏超级玛丽。MyTimer头文件// 程序名称:精确到微秒的延时类(基于多媒体定时器)#pragma once#include class MyTimer{private: LARGE_INTEGER m_clk;// 保存时钟信息 LONGLONG m_oldclk;// 保存开始时钟和结束时钟原创 2013-05-26 21:31:29 · 6294 阅读 · 0 评论 -
【软件设计】利用printf()函数作图
问题使用printf函数画的一些数学函数图形。代码:///////////////////////////////////////////////////// // 程序名称:printf()函数作图demo // 作 者:Gavin Liu (songzitea@sina.com) // 完成时间:2005-6-29 /////////////////////原创 2012-12-31 22:15:22 · 3297 阅读 · 0 评论 -
Visual C++ 2008 Nested if Satements
The Nested if With a working examaple.// Ex3_01.cpp//A nested if demonstration#include using std::cin;using std::cout;using std::endl;int main (){ char letter =0; //store input in line cou原创 2010-06-14 00:53:00 · 1553 阅读 · 0 评论 -
pragma 预处理指令详解
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 其格式一般为: #pragma para 其中para为参数,下面原创 2012-09-21 17:39:11 · 1326 阅读 · 0 评论 -
C语言实现流星雨
程序模拟一组流星飞向地面的情景。流星用大写字母不表示。程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。原创 2012-12-30 20:50:48 · 45237 阅读 · 7 评论 -
利用printf()实现简单动画,触界反弹的球
利用printf()实现简单动画。本程序实现的是一个运动过程中触界反弹的球,在程序演示的过程中,ESC键可以随时终止程序. 当然你可以利用system("cls");实现动画效果,这里采用GotoXy()函数,然后利用背景色的空格擦掉痕迹作图,来实现动画效果原创 2012-12-31 22:01:12 · 3415 阅读 · 0 评论 -
单词倒置实现
问题:将一句话里的单词进行倒置,标点符号不倒置。分析:1) 将字符串完全倒置.2)将每个单词进行部分倒置.代码://单词倒置#include #include #include using namespace std;int main ( ){ int j =0; int i =0; int begin,end; char temp;原创 2012-12-30 23:21:52 · 2701 阅读 · 1 评论 -
商人胡萝卜问题
一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。 已知驴一次性可驮1000根胡萝卜,但每走1公里又要吃掉1根胡萝卜。 问:商人最多可卖出多少胡萝卜?要使到达终点的萝卜最多,就不能浪费,要么到达了终点,要么被吃在了路上。 所以要把3000个萝卜整体的前移,一次只可以带1000个萝卜,所以3000个要都前移需要出去回来、出去回来、再出去。 同样的路要走5原创 2012-12-31 12:11:39 · 3940 阅读 · 0 评论 -
螺旋矩阵、螺旋队列算法
问题描述螺旋矩阵是一个nxn的方阵,其中元素为自然数,但像螺旋方向一样递增。举例如下:若n = 3,螺旋矩阵为:1 2 38 9 47 6 5若n = 4,螺旋矩阵为: 1 2 3 412 13 14 511 16 15 610 9 8 7若n = 5,螺旋矩阵是: 1 2 3原创 2012-12-30 19:56:55 · 16341 阅读 · 1 评论 -
杨辉三角形算法
编写程序,打印出以下形式的扬辉三角形。杨辉三角是一个由数字排列成的三角形数表,一般形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ...............................原创 2012-12-30 23:44:41 · 6497 阅读 · 0 评论 -
如何设置VS2008 辅助编译代码提示相关函数以及相关函数的参数
当我们在编写程序时,输入某一个函数前面几个字母,相应的弹出一相关函数以及相关函数的参数.以Visual Studio 2008(English)为准,步骤如下: 1. 打开"Microsoft Visual Studio 2008" 2.在Visual Studio 2008 界面。“菜单栏”选择“Tools - >Options... ->Environment”如图所示原创 2010-06-08 18:31:00 · 17799 阅读 · 9 评论 -
解决VS 2008出现EMM intrinsics not supported in the pure mode
Errors: D:/Program Files/Miscrosoft Visual studio 9.0/Vc/include/emmintrin.h(27):fatal error C1189:#error:ERROR:EMM intrinsics not supported in the pure mode!Sovlation:Set the solutionProperti原创 2009-09-10 19:52:00 · 3907 阅读 · 1 评论 -
读取文件夹连续图片
总结一下关于图片批量处理方法,仅作参考。原创 2014-04-24 13:12:40 · 3254 阅读 · 0 评论 -
图像膨胀与腐蚀实现
膨胀(dilation)可以看做是腐蚀的对偶运算,其定义是:把结构元素B平移a后得到Ba,若Ba击中X,我们记下这个a点。所有满足上述条件的a点组成的集合称做X被B膨胀的结果。用公式表示为:D(X)={a | Ba↑X}=X B,图1.膨胀的示意图如图1所示。图1中X是被处理的对象,B是结构元素,不难知道,对于任意一个在阴影部分的点a,Ba击中X,所以X被B膨胀的结果就是那个原创 2014-03-22 00:04:50 · 2582 阅读 · 0 评论 -
二维高斯核实现
因在工程中,要求代码可移植性,经常是用纯C写的。下面代码是计算2-D高斯核,然后将计算得到的2-D高斯核可以用来对图像进行高斯滤波。/* * Eclispe CDT */#include #include #include #include const double eps=1e-6;class GuassianKernel{private: int i,j,k;原创 2014-02-25 20:21:33 · 4037 阅读 · 0 评论 -
程序实践系列(四)使用类设计整数集合类
设计整数集合类Set,该类包括以下数据成员: int elem[N]; //存放集合元素 int num; //集合中最后一个元素位置 和以下成员函数: Set(); //默认构造函数 Set(int a[],ints); //以数组a的元素和位置s构造一个集合 void empty();原创 2014-09-26 21:51:06 · 4604 阅读 · 2 评论 -
程序实践系列(七)C++概述
在面向过程的程序设计中,数据只被看成是一种静态的结构,它只有等待调用函数来对它进行处理。在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义;另外,封装还提供一种对数据访问严格控制的机制,因此,数据将被隐藏在封装体中,该封装体通过操作接口与外界交换信息。 关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2014-10-24 20:56:26 · 1335 阅读 · 0 评论 -
程序基石系列(十四) 虚析构函数
用一个例子来说明虚析函数的必要性.在程序中,基类A的构造函数动态分配5个字节,其析构函数负责释放这块内存.派生类Z的构造函数动态分配5000个字节,其析构函数负责释放这块内存.由于类A和Z的构造函数与析构函数输出了跟踪信息.通过定义基类的析构函数~A()为虚成员函数,可以确保其派生类的析构函数也为虚成员函数.为了使代码更清晰,我们可以明确地使用关键字virtual来声明~Z(),不过即使我们不这样做,~Z()仍然为虚成员函数,由于析构函数已经声明为虚成员函数,当通过ptr来删除其所指针的对象时,编译器进行的原创 2014-11-06 12:19:22 · 1268 阅读 · 0 评论 -
程序实践系列(十):C++流和文件流
编写一个程序,输入一系列的数据(学号、姓名、成绩)存放在文件stud.dat中。输出这些学生数据和相应的成绩等级(≥90为优,80~89为良,70~79为中,60~69为及格,≤59为不及格).关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2014-11-21 20:43:14 · 1837 阅读 · 0 评论 -
程序实践系列(五)引用和friend
1. 设计一个类CSample,它有一个私有数据成员n,建立该类的4个对象,即s1(n=10)、 s2(n=20)、s3(n=30)和s4(n=40),建立一个成员函数实现这些对象n值的累加,但要求不使用静态数据成员,而且对象自已不能与自己相加。 2. 设计一个日期类CDate,包括日期的年份、月份和日号,编写一个友元函数求两个日期之间相差的天数。原创 2014-10-10 19:34:51 · 1778 阅读 · 0 评论 -
程序实践系列(九)多态性和虚函数
设计一个评选优秀教师和学生的程序,其类结构如下图所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来,并采用相关数据进行测试.解析:设计一个基类base,含纯虚函数isgood(),由base类派生出类student和类teacher,分别包含纯虚函数针对学生和教师为优秀的定义。关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.原创 2014-11-07 20:29:13 · 2030 阅读 · 0 评论 -
程序实践系列(六)运算符重载 "+" 和"-"
设计一个时间类CTime,包括时、分、秒等私有数据成员。要求实现时间的基本运算,如一时间加上另一时间、一时间减去另一时间等。原创 2014-10-17 19:14:22 · 1722 阅读 · 0 评论 -
程序实践系列(八)继承与派生
设计一个人员类person.其中包括姓名和衣服、裤子及鞋子的指针;将其衣服、裤子及鞋子分别设计成类clothes、pants和shoe的对象,这3个类都是从物品类object派生的, object类包括物品类型和颜色数据成员;并采用相关数据进行测试。原创 2014-10-24 18:01:03 · 2047 阅读 · 2 评论 -
不使用加减乘除求余操作符求一个数的1/3
内容来源:http://stackoverflow.com/questions/11694546/divide-a-number-by-3-without-using-operators问题:在不使用*、/、+、-、%操作符的情况下,如何求一个数的1/3?解决方法:第1种方法:使用位操作符并实现“+”操作There is a simple function I foun原创 2013-10-24 03:27:02 · 1954 阅读 · 0 评论 -
取样问题
问题描述程序最终结果用上的输入数据只是部分(样品),若将全部输入放入内存再进行计算后取出结果,很可能会导致浪费掉大量的时间空间。输入:m和n,使 0 < m < n ( m, n均为整数)。输出:m个随机整数的有序列表。(随机整数不允许重复)方案一:使用概率计算伪代码设:bigrand()能返回一个远大于n的函数.randint(i, j)能返回一个i...j范围内均匀选择原创 2013-06-02 20:22:42 · 2170 阅读 · 0 评论 -
如何优化程序打印出小于100000的素数
问题描述 从2开始到n-1都不能整除则为素数。优化从2到sqrt(n)不能整除就可以 通过对被2、3和5整除的特殊检验,避免了近3/4的开方运算,其次,只考虑奇数作为可能的因子,在剩余的数中避免了大约一半的整除检验(注意一点,2,3,5本身也是素数)(If( n%2 == 0 ) return (n==2); //能被2整除且不是2本身的不是素数)用乘法运算代替开方运算in原创 2013-04-28 22:12:38 · 2915 阅读 · 2 评论 -
插入排序
插入排序的精髓就是首先将第一个元素视为有序子数组x[0...0],然后插入x[1]...x[n-1].思想很简单,优化思路:内循环的swap函数可能不如内联函数快些,所以第一步优化将该swap函数展开,据作者说,展开后效率提高了60%。优化思路:由于内循环中总是给变量t赋同样的值(x[i]的初始值),所以内循环关于t的两条赋值语句移出循环,据说这么做的效率又提高了15%。插入排序的效率总是O(n2),效率差在比较的次数以及交换的频率,如果交换的频率减少的话就可以大大提高插入排序的效率,这也是为什么元素基本有原创 2013-04-20 02:09:15 · 2359 阅读 · 0 评论 -
快速排序
在编程珠玑一书对快速排序讲得较为透彻,最早的快排是单向的,慢慢演化成双向的,也就是目前的版本。从此书能看到这种演化的必要性。我想在这里,对其原理搞懂了就不会忘了(^_^)。快速排序思想1962年,由C.A.R.Hoare创造出来。该算法核心思想就一句话:“排序数组时,将数组分成两个小部分,然后对它们递归排序”。然而采取什么样的策略将数组分成两个部分是关键,想想看,如果随便将数组A分成A原创 2013-04-14 22:17:12 · 2056 阅读 · 0 评论 -
高精度整数加法
问题描述需要进行更大范围的十进制整数加法,需要使用特殊的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。比如下面问题:9876543210 + 1234567890 =?让字符串 num1 = "9876543210",字符串 num2 = "1234567890",结果保存在字符串result中。要求编程实现上述高精度的十进制加法。分析发现单纯看代码是件原创 2013-04-10 23:02:19 · 1973 阅读 · 0 评论 -
【编程珠玑】排序与位向量
问题描述 1: 如果不缺内存,如何使用一个具有库的语言来实现一种排序算法以表示和排序集合?(来源于《编程珠玑》第2版第1章中第7页习题1)分析:我们应该对题目进行分析: 1)对内存并没有什么要求;2)选择库的语言来实现;3)排序算法。若我们需要访问的是一个长度(假设n为1000000)非常大的数组,一般而言对数组中某个元素访问前我们必须要进行初始化,但是当n值非常大而程序对tim原创 2013-04-05 16:08:32 · 2314 阅读 · 0 评论 -
随机顺序的随机整数
问题描述 如何生成位于0到n-1之间的k个不同的随机顺序的随机整数?(来源于《编程珠玑》第2版的第1章中第7页习题4)方法1 在使用Random类时,每次选择不同的随机因子并在Next中划定范围。这种方法简单容易实现,看上去似乎是可以满足需求的,但我不知道怎么去证明static void GenRandoInt1(int n , int [] array, i原创 2013-04-05 16:09:22 · 2171 阅读 · 0 评论 -
空间换时间的数据结构问题
问题描述One problem with trading more space to use less time is that initializing the space can itself take a great deal of time. Show how to circumvent this problem by designing a technique to initiali原创 2013-04-05 18:58:06 · 4021 阅读 · 8 评论 -
约瑟夫环解法
问题描述设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,给出这n个人的顺序表p。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把编号按照出圈的顺序输出到OUT.DAT文件中。设 n = 100, s = 1, m =原创 2013-04-07 20:44:34 · 2019 阅读 · 0 评论 -
Juggling算法
问题描述关于本节问题描述,我们在前几节已经出现,即:旋转交换的引用中问题。提出另一种方案,Juggling算法解决这个问题。(来源于《编程珠玑》第2版的第2章第11页问题B)请将一个具有n个元素的一维向量向左旋转i个位置。例如,假设n=8,i=3,那么向量abcdefgh旋转之后得到向量defghabc。简单编码使用一个具有n个元素的中间向量分n步即可完成此作业。你可以仅使用几十字节的原创 2013-04-10 17:29:56 · 2384 阅读 · 0 评论 -
C++ --Do the Untwist
BackgroundCryptography deals with methods of secret communication that transform a message (the plaintext) into a disguised form (the ciphertext) so that no one seeing the ciphertext will be able to原创 2014-02-22 20:39:24 · 1390 阅读 · 0 评论 -
字典树,后缀树
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。原创 2013-07-09 22:45:53 · 2361 阅读 · 0 评论 -
利用马尔可夫链生成随机文本
二阶马尔可夫链:例如:of the people, by thepeople, for the peoplePrefix(后缀数组)Suffixof the people è 比如 thepeople后面可以跟by for 空,可根据概率选择一个如果选择for,则过度到状态people for,从the people原创 2013-07-02 18:33:42 · 7554 阅读 · 0 评论 -
堆排序的实现
堆排序(Heap Sort)堆排序(HeapSort)是一树形选择排序。堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录.堆排序的最坏时间复杂度为O(nlogn)。堆序的平均性能较接近于最坏性能。由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。堆排原创 2013-05-25 18:47:07 · 2245 阅读 · 0 评论