博文
[STL学习笔记]概要(2006-07-26 00:45:00)
摘要:STL(Standard Template Library)
参考书籍:《C++ STL程序员开发指南》
<2006年7月14日>
以下红色字体为STL概要(摘录自C++ STL程序员开发指南前言部分)
1998年,C++标准正式通过,并且将在接下来的一段时间中保持一种稳定的状态。它既是ANSI标准,也是ISO标准,也就是说,它既是美国的国家标准,也是一种全球通用的标准。作为标准化进程的一部分,整个标准C++语言及库第一次完整地描述在一起。一个相对较晚加入这个标准化进程的时间是在C++标准的草案中接纳STL位C++标准的一部分。同样,在1994年6月被标准化委员会接纳为C++标准草案的一部分之前,对STL的早期描述(至少早于S&L95)仅限于一个相对狭窄的范围内。 在接纳的过程中,STL本身又被重新组织并且在几个重要的环节做了修改。现在,在标准C++中的STL已经不再是由惠普实验室开发出来的那套软件开发包,同时它与那些由不同的代理提供的强化版也不同。
STL能够给编程人员带来很多的好处,比如熟悉了C++ STL编程思想后,很多用传统的C++编写的代码实际上用几句STL编码就可以实现。通过调用一两个算法模板,就可以得到一些幽雅但绝对高效的代码,所以STL技术出现以来就一直非常流行,而且发展劲头强劲。近几年来,国内也掀起了一股STL热,要掌握C++ STL技术,必须精通C++高级编程技术,而C++过度到C++ STL,对很多爱好者来说是一片茫然。
STL的学习从而有个过度阶段,如下图所示!
&nb......
模拟计算器续(MFC算法类的封装)(2006-05-30 15:58:00)
摘要:
class compute{public: void init(string &); void error(int); double cal(string &); bool is_optr(char); double operat(double,char,double); char precede(char,char); char * get_value(char *);
private: string str; char value[10]; };void compute::init(string& s) //初始化输入表达式. { s+="#"; //S以#结束 }
void compute::error(int tag) //报错函数 { switch(tag) { case 1: value="输入错误的操作符!请重新输入!"; UpdateDate(FALSE); &......
求两个字符串的最长公共子序列(2006-05-25 13:25:00)
摘要://autor:baker
//time:25/5/06
//email:baker1203@sina.com
/* 求两个字符串的最长公共子序列。
X的一个子序列是相应于X下标序列{1, 2, …, m}的一个子序列,求解两个序列的所有子序列中长度最大的,例如输入:pear, peach输出:pea。
分析:
次题可用动态规划算法解决。
首先定义一个二维数组:A【】【】;
A[i][j]
M
G
D
D
G
0
1
0
0
g
0
1
0
0
d
0
0
2
1
d
0
0
0
3
如上,A[I][J]表示在此字符以前互相匹配的字符数目,当MAX=MAX(MAX,A[I][J])为最大时,即求得最大匹配子串。
当STR1[I]=STR2[J]时,A[I][J]=A[I-1][J-1]+1,即左上方最大匹配字符数目加一。
当MAX为最大时,记录下当前扫描STR1的位置为TAG
(2)源代码如下:
*/
#include"iostream"
#include"conio.h"
#include"string"
using namespace std;
void maxstring(string str1,string str2)
{
int max=0,tag,i,j;
int length1=str1.size();
int length2=str2.size();
int a[length1+1][length2+1];
for(i=0;i<=length1;i++)
&nb......
模拟计算器(C++)(2006-05-16 13:51:00)
摘要://author: baker//email:baker1203@sina.com//course designing for data structures and program design in c++//time:16/5/2006/* a simulant calculatordescription: requiring design a simulant calculator ,which could take operations such as +,-,*,/ ,( ),or functon SQR ,ABScondition:inputted expression can limit into int type.therefore ,you must check the expression for exactness.if the errorstake place ,the program would give an alarm.
*/
#include<iostream> #include<conio.h>#include<stack> #include<string> #include<cstdlib>#include<math.h> using namespace std; void init(string& s) //³õʼ»¯ÊäÈë±í´ïʽ. { cout<<"enter the ex......
stl.vector的另外一个实例(2006-03-28 09:04:00)
摘要:目标:
练习泛型算法的使用;
内容:
定义一个vector,元素类型为INT,插入10个随机数,使用sort按升序排序,输出每个元素的值,再按降续排序,输出每个元素的值,练习用find查找元素,用min和max找出容器中的最小元素和最大元素,并输出。
实验时间:
3.28 日上午 8.30
源代码:
#include"vector"#include"iostream"#include"algorithm"#include"conio.h"#include"stdlib.h"
using namespace std;
int main(){ vector<int>num; vector<int>::iterator p; int m,q; for(int i=0;i<10;i++) num.push_back(rand()); sort(num.begin(),num.end()); for(p=num.begin();p!=num.end();p++) cout<<*p<<endl; cout<<endl; sort(num.begin(),num.end(),greater<int>()); ......
stl.vector的一个实例(2006-03-27 22:58:00)
摘要:目标:练习vector和list(略)的使用;
内容:
定义一个空VECTOR,元素类型为INT,生成10,个随机数插入VECTOR中,用跌代器遍历VECTOR并输出其中的元素值,用VECTOR头部插入一个随机数,如果找到便输出,否则将此数插入到容器尾部.用范型算法SORT将VECTOR排序,用跌带器便历,删除VECTOR尾部的元素.用跌带器遍历并输出其中元素.清空.
时间:3.27日 22.0
源代码(c++描述):
#include"vector"#include"iostream"#include"algorithm"#include"stdlib.h"#include"conio.h"using namespace std;
int main(){ vector<int>num; int i,a; for(i=0;i<10;i++) num.push_back(rand()); cout<<endl; vector<int>::iterator p=num.begin(),last=num.end(),p1; for(;p!=last;p++) cout<<*p<<endl; cout<<endl; last++; num.insert(nu......
MFC入门<4>: 消息映射(2006-02-20 16:54:00)
摘要:
引用:http://www.czvc.com/tech/MFCJMJC/mfc.html 应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。在上一讲中,你已经学习了CStatic控制和如何使用样式属性来定制用户界面对象的外观。这些概念可用于MFC中的所有不同控制类。 在本讲中,我们将介绍CButton控制,以理解消息映射和简单的事件处理。然后还要介绍使用CScrollBar控制的稍微复杂点的例子。 理解消息映射 在第二讲中,MFC程序不包括主要函数或时间循环。所有的事件处理都是作为CWinApp的一部分在后台处理的。因为它们是隐藏的,所以我们需要一种方法来告诉不可见的时间循环通告我们应用程序所感兴趣的事件。这需要一种叫做消息映射的机制。消息映射识别感兴趣的事件然后调用函数来响应这些事件。 例如,如果你要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。在程序中,你编写代码来建立按钮:你指示按钮应如何动作。然后,为其父窗口建立用户单击按钮时的消息映射,它试图要传递消息给其父窗口。为了建立父窗口的消息,你要建立截取消息映射的机制,并且使用按钮的消息。当一指定的按钮事件发生时,消息映射会请求MFC调用一指定的函数。在这种情况下,单击退出按钮就是所感兴趣的事件。然后你把退出应用程序的代码放到指定的函数中。 其它的工作就由MFC来做了。当程序执行时,用户单击“退出”按钮时,按钮就会自己加亮。然后MFC自动调用相应的函数,并且程序会终止。只使用很少的几行代码你就响应了用户事件。 CButton类 在上一讲中所讨论的CStatic控制是唯一不响应用户时间的控制。Windows中所有的其它控制都可响应用户事件。第一,当用户处理它们时,它们会自动更新其外观(例如,当用户单击按钮时,按钮会自己加亮以给用户一个反馈)。第二,每个不同的控制都要发送信息给你的代码以使程序能响应用户的需要。例如,当单击按钮时,按钮就会发送一个命令消息。如果你编写代码接收消息,则你的代码就能响应用户事件。 为了理解这个过程,我们从CButton控制开始。下面的代码说明了建立按钮的过程: // button1.cpp #include #define IDB_BUTTON 100 // Declare the applic......
MFC入门<3>:MFC样式(2006-02-20 16:52:00)
摘要:引用:http://www.czvc.com/tech/MFCJMJC/mfc.html
控制是用来建立Windows应用程序用户界面的用户界面对象。你所见到的大部分Windows应用程序和对话框只不过是由一些控制所组成的、用来实现程序功能的东西。为了建立有效的应用程序,你必须完全理解在Windows应用程序中应该如何合理的使用控制。有六个基本的控制:CStatic、CButton、CEdit、CList、CComboBox和CScrollBar。另外,Windows 95又增加了15增强了的控制。你需要理解的是那个控制能做些什么、你应该如何控制它的外表和行为以及如何让控制能响应用户事件。只要掌握了这些,再加上掌握了菜单和对话框,你就可以建立你所想象的任何Windows应用程序。你可以象本教程这样用程序代码来建立控制,也可以使用资源编辑器通过资源文件来建立。当然,对话框编辑器更方便些,它对于已经基本掌握了控制的情况下特别有用。 最简单的控制是CStatic, 它是用来显示静态文本的。CStatic类没有任何数据成员,它只有少量的成员函数:构造函数、Create函数(用于获取和设置静态控制上的图标)等等。它不响应用户事件。因为它的简单性,所以最好把它作为学习Windows控制的开端。 在本讲中,我们从CStatic着手,看一下如何修改和定制控制。在下一讲中,我们将学习CButton和CScrollBar类,以理解事件处理的概念。一旦你理解和掌握了所有控制极其类,你就可以建立完整的应用程序了。 基 础 MFC中的CStatic类是用来显示静态文本信息的。这些信息能够可以作为纯信息(例如,显示在信息对话框中的错误消息), 或作为小的标签等。在Windows应用程序的文件打开对话框中,你会发现有六个这样的标签。 CStatic控制还有几种其它的显示格式。你可以通过修改标签的样式来使它表现为矩形、边框或图标等。 CStatic控制总是作为子窗口的形式出现的。典型情况下,其父窗口是应用程序的主窗口或对话框。正如上一讲所介绍的,你用两行代码就可以建立一个静态控制: CStatic *cs; ... cs = new CStatic(); cs->Create("hello world", WS_CHILD|WS_VISIBLE|SS_CE......
MFC入门<2>:一个简单的MFC程序(2006-02-20 16:50:00)
摘要:
引用:http://www.czvc.com/tech/MFCJMJC/mfc.html 在本将中,我们将一段一段地来研究上一将中提到的 MFC 应用程序,以便能理解它的结构和概念框架。我们将先介绍 MFC,然后在介绍如何用 MFC 来建立应用程序。 MFC简介 MFC 是一个很大的、扩展了的 C++ 类层次结构,它能使开发 Windows 应用程序变得更加容易。MFC 是在整个 Windows 家族中都是兼容的,也就是说,无论是 Windows3.x、Windows95 还是 Windows NT,所使用的 MFC 是兼容的。每当新的 Windows 版本出现时,MFC 也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC 也回得到扩展,添加新的特性、变得更加容易建立应用程序。 与传统上使用 C 语言直接访问 Windows API相反,使用 MFC 和 C++ 的优点是 MFC 已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用 C 编写的 Windows 程序所必需的。因此用 MFC 编写的程序要比用C语言编写的程序小得多。另外,MFC 所编写的程序的性能也毫无损失。必要时,你也可以直接调用标准 C 函数,因为 MFC 不修改也不隐藏 Windows 程序的基本结构。 使用 MFC 的最大优点是它为你做了所有最难做的事。MFC 中包含了上成千上万行正确、优化和功能强大的 Windows 代码。你所调用的很多成员函数完成了你自己可能很难完成的工作。从这点上将,MFC 极大地加快了你的程序开发速度。 MFC 是很庞大的。例如,版本4.0中包含了大约200个不同的类。万幸的是,你在典型的程序中不需要使用所有的函数。事实上,你可能只需要使用其中的十多个 MFC 中的不同类就可以建立一个非常漂亮的程序。该层次结构大约可分为几种不同的类型的类: 应用程序框架 图形绘制的绘制对象 文件服务 异常处理 结构 - List、Array 和 Map Internet 服务 OLE 2 数据库 通用类 在本教程中,我们将集中讨论可视对象。下面的列表给出了部分类: CObject CCmdTarget CWinThread CWinApp CWnd CFrameWnd CDialog ......
MFC入门<1>:MFC导论(2006-02-20 16:48:00)
摘要:
引用:http://www.czvc.com/tech/MFCJMJC/mfc.html
Visual C++ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的 C++ 来开发出专业级的 Windows 应用程序。为了能充分利用这些特性,你必须理解 C++ 程序设计语言。掌握了C++,你就必须掌握 Microsoft 基本类库 (MFC) 的层次结构。该层次 结构包容了 Windows API 中的用户界面部分,并使你能够很容易地以面向对象的方式建立 Windows 应用程序。这种层次结构适用于所有版本的 Windows 并彼此兼容。你用 MFC 所建立的代码是完全可移植的。 该教程将向你介绍MFC的基本概念和术语以及事件驱动程序设计方法。在本节中,你将会输入、编译和运行一个简单的MFC程序。下一节中将向你详细解释这些代码。第三部分讨论了MFC控制和如何定制它们。第四部分将介绍消息映射,你将会处理MFC的事件。 什么是MFC? 如果你要建立一个 Windows 应用程序,应该如何下手? 好的开端是从设计用户界面开始。首先,你要决定什么样的用户能使用该程序并根据需要来设置相应的用户界面对象。Windows 用户界面有一些标准的控制,如按钮、菜单、滚动条和列表等,这对那些 Windows 用户已经是很熟悉了。 要记住的是,作为程序员必须选择一组控制并决定如何把它们安排到屏幕上。传统上,你需要在纸上做一下用户界面的草图,直到对各元素感到满意为止。这对于一些比较小的项目,以及一些大项目的早期原型阶段是可以的。 下一步,是要实现代码。为任何 Windows 平台建立应用程序时,程序员都有两种选择:C 或 C++。 使用 C,程序员是在 Windows 应用程序界面 ( API ) 的水平上编写代码。该界面是由几百个 C 函数所组成,这些函数在Windows API 参考手册中都有介绍。对于Windows NT, API 被称为 “Win32 API”,以区别于其用于Windows 3.1的16位 API。 Microsoft 也提供了 C++ 库,它位于任何 Windows API 之上,能够使程序员的工作更容易。它就是Microsoft基本类库 (MFC),该库的主要优点是效率高。它减少了大量在建立 W......
