随笔分类 - VC技术
1
MFC中对象序列化技术的实现
摘要:1、需求对于支持序列化操作的类可以将不同类的不同对象以序列的形式写到文件中;可以通过读取序列化文件还原对应类的对应实例;针对对象的哪些内容进行序列化由对象来决定;2、需求示例2.1、需要序列化的对象对应的类lCNameclass CName:public CObject{public: DECLARE_SERIAL(CName) CName() {m_d1=0;m_d2=0;}; CName(double d1,double d2) {m_d1=d1;m_d2=d2;}; void Serialize(CArchive& ar) { CObject::Serialize(ar); if
阅读全文
[VC/C++]CString,int,string,char*之间的转换
摘要:string 转 CString CString.format("%s", string.c_str()); char 转 CString CString.format("%s", char*); char 转 string string s(char *); string 转 char * char *p = string.c_str(); CString 转 string string s(CString.GetBuffer()); 1,string -> CString CString.format("%s", strin
阅读全文
C++虚函数的作用
摘要:类的三个重要特征:封装、继承、多态性。其中多态性就是通过函数重载(运算符重载实质上也是函数重载)和虚函数来实现的。虚函数的作用:在基类用virtual声明成员函数为虚函数,在派生类中重新定义该函数,就可以通过基类指针或引用来访问基类和派生类中的同名函数。虚函数实现多态性:同一类族中不同类的对象,对同一函数调用做出不同的响应。多态性其实就是一个接口,多种方法,分为静态多态性和动态多态性,函数重载属于静态多态性,在程序编译时就可确定调用哪个函数,其过程称为静态关联或早期关联,静态多态性又称编译时多态性;虚函数属于动态多态性,在程序运行过程中才动态地确定所调用的是那个对象的函数,其过程称为动态关联或
阅读全文
STL所有算法简介
摘要:STL中的所有算法(70个)参考自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.htmlhttp://hi.baidu.com/dinglinbin/blog/item/887e7c30c12e429ba9018e30.html STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包含<numeric>,<functional>中则定义了
阅读全文
C++类模板与STL编程
摘要:1,学习目标1.理解类模板的概念;2.掌握类模板的定义、实例化过程,会运用类模板;3.掌握栈类模板、链表类模板的使用;4.理解STL编程的基本思想;5.掌握STL容器的使用;6.熟练使用STL算法;7.理解STL函数对象;类模板模板是C++语言的重要特征,它能够显著提高编程效率。利用C++的函数模板和类模板,能够快速建立具有类型安全的类库集合和函数集合,进行大规模软件开发,并提高软件的通用性和灵活性。C++的标准模板库(standard template library,简称STL)编程完全依赖模板的实现。 类模板是能根据不同参数建立不同类型成员的类。类模板中的数据成员、成员函数的参数、成员函
阅读全文
一个有意思的逻辑判断问题
摘要:问题如下:写一个程序,读取文本文件,判断关系结构是否存在错误。文件格式如下:1,24,23,58,12, 8…每一行的两个数字a,b表示a>b 上面的文件中,因为1>2 8>1 所以当读到2>8时要返回错误,并指出错误的行号。如果没有错误 那么把正确的结果排序输出。解决思路如下:要想判断后续的序列是否存在逻辑错误,必须将每个元素的后续元素都保存起来。比如,1是大于2的。必须将2保存起来,并和1关联。8是大于1的,并且1大于2,因此必须将8>1>2都保存起来。我的程序如下:#include<iostream>#include <map>
阅读全文
转:Map嵌套vector示例
摘要:#pragma warning(disable : 4786 ) #include <string> #include <iostream> #include <algorithm> #include <map> #include <vector> using namespace std; typedef map<string, string> STRING2STRING; typedef std::map<string, vector<string > > STRING2VECTOR; int m
阅读全文
vetor去掉重复元素
摘要:STL提供了很多实用的算法,这里主要讲解sort和unique算法。删除重复元素,首先将vector排序。sort( vecSrc.begin(), vecSrc.end() );然后使用unique算法。vecSrc.erase( unique( vecSrc.begin(), vecSrc.end() ), vecSrc.end() );unique返回值是重复元素的开始位置。如果vector中存储的元素是自定义的结构或者是类,那么就需要重载操作符。根据类的某一个成员变量排序或者比较。sort算法需要重载"<"操作符。unique算法需要重载"==&qu
阅读全文
模板的概念
摘要:我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,float y){return (x>y)? x:y ;}//函数3.double max(double x,double y){return (c>y)? x:y ;}但如果在主函数中,我们分别定
阅读全文
C++标准库头文件介绍
摘要:C++标准库的所有头文件都没有扩展名。C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能。 <cname>形式的标准头文件【 <complex>例外】其内容与ISO标准C包含的name.h头文件相同,但容纳了C++扩展的功能。在 <cname>形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在std命名空间中声明。在C++中还可以使用name.h形式的标准C库头文件名。C++标准库的内容分为10类:C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串C6.容器 C7.迭代器支持 C8.算法 C9.数
阅读全文
STL几种容器间的比较
摘要:在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了string、vector、list、deque、set 是有序容器1.stringstring 是basic_string<char> 的实现,在内存中是连续存放的.为了提高效率,都会有保留内存,如string s= "abcd",这时s使用的空间可能就是2
阅读全文
STL容器之stack,queue操作
摘要:Stack不允许遍历,只有一个出口,只允许对最顶端的元素进行操作。SGI STL默认以deque作为stack的底层结构。为什么要使用deque作为stack的底层结构呢?因为deque可以很容易的封住其中某个方向的接口,而且deque便于扩容,底层结合了list和vector,比起单一的使用list或者vector来实现stack更加方便高效。由于stack是依赖底层容器完成其功能的,所以这种“修改某个物件的接口,形成另一种新的接口”的,叫做adapter。Template<class T, class Sequence=deque<T> > Class stack{
阅读全文
STL容器之SET操作
摘要:这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类,每一个元素包含了一个排序键(sort key)和一个值(value)。对这个序列可以进行查找、插入、删除序列中的任意一个元素,而完成这些操作的时间同这个序列中元素个数的对数成比例关 系,并且当游标指向一个已删除的元素时,删除操作无效。”而一个经过更正的和更加实际的定义应该是:一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。这在收集一个数据的具体值的时候是有用的。集 合中的元素按一定
阅读全文
STL容器之MAP操作
摘要:Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。下面举例说明什么是一对一的数据映射。比如一个班级中,每个学生的学号跟他的姓名就存在着一一映射的关系,这个模型用map可能轻易描述,很明显学号用int描述,姓名用字符串描述(本篇文章中不用ch
阅读全文
MFC,ListBox使用
摘要:istBox窗口用来列出一系列的文本,每条文本占一行。创建一个列表窗口可以使用成员函数:BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。LBS_MULTIPLESEL 指明列表框可以同时选择多行LBS_EXTENDEDSEL 可以通过按下Shift/Ctrl键选择多行LBS_SOR
阅读全文
MFC ,List使用
摘要:List容器双向线性表list容器 list类定义了双向的线性表。Vector类支持随机访问,但list只能支持顺序访问,由于list是双向的,因此我们可以按从前到后或者从后到前的顺序来访问list。1.创建一个list对象#include<list>using namespace std; list<int> lst1;list<char> lst2;2.向list对象中添加数值从前面添加: lst1.push_front(0); lst1.push_front(1);从后面添加: lst1.push_back(0); lst1.push_back(1);
阅读全文
MFC,C++,Vector使用
摘要:标准库Vector类型使用需要的头文件:#include <vector>Vector:Vector 是一个类模板。不是一种数据类型。 Vector<int>是一种数据类型。一、 定义和初始化Vector<T> v1; //默认构造函数v1为空Vector<T> v2(v1);//v2是v1的一个副本Vector<T> v3(n,i);//v3包含n个值为i的元素Vector<T> v4(n); //v4含有n个值为0的元素二、 值初始化1> 如果没有指定元素初始化式,标准库自行提供一个初始化值进行值初始化。2>
阅读全文
MFC字符串分隔函数
摘要://自定义分隔函数int Split(CString source, CString ch,CStringArray &strarr){/*--------------------------------------------------------- * 函数介绍: 从原字符串里按照指定的分隔字符串进行分割,将分隔的结果存放到字符串数组里 * 输入参数:source -- 原字符串ch -- 指定的分隔字符串strarr -- 外部引用的一个字符串数组 * 输出参数: * 返回值 :总共分隔了多少段字符串.--------------------------------------
阅读全文
Parsing Error是怎么回事
摘要:{{AFX_DATA_INIT好像是MFC的注释宏,来初始化成员变量的。我们自定义的变量;并不是和控件相关联的成员变量,MFC可能有时候就识别不了了。就出错。所以要将我们自定义的变量放到 //}}AFX_DATA_INIT的外面。应该就不会有问题 了。
阅读全文
MFC文件操作详解
摘要:各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。 1.文件的查找 当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。 CString strFileTitle; CFileFind finder;...
阅读全文
1
浙公网安备 33010602011771号