C++
文章平均质量分 70
摩天轮的思念
这个作者很懒,什么都没留下…
展开
-
共用数据保护(const类型)
常对象:定义对象时指定对象为常对象,常对象必须要有初值。 eg: Time const t1(12, 34, 56); //t1为常对象在所有场合中,对象t1中所有成员的值不能被改变。定义常对象形式: 类名 const 对象名 [(实参表列)] 或 const 类名 对象名 [(实参表列)] 注意:1.如果一个对象被声明为常对象,则不能调原创 2017-02-02 14:26:29 · 399 阅读 · 0 评论 -
C++异常处理
异常的抛出和捕获(1)异常是通过抛出对象而引发的,该对象的类型决定了应该激活哪个处理代码。( 2). 被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那一个。原创 2017-03-29 13:46:30 · 350 阅读 · 0 评论 -
不能声明为虚函数的函数:
使用虚函数时,有两点要注意: (1)只能用virtual声明类的成员函数,使它成为虚函数,而不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。显然,它只能用于类的继承层次结构中。 (2)一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。原创 2017-03-13 20:08:22 · 2466 阅读 · 0 评论 -
类模板模拟实现STL中List
构造函数: list<int> c1(3); //建一个含三个默认值是0的元素的链表 list<int> c2(5,2); //建一个含五个元素的链表,值都是2 list<int> c4(c2); //建一个c2的拷贝构造链表成员函数:(1)begin() 返回指向链表第一个元素的迭代器。(2)end() 返回指向链表最后一个元素之后的迭代器。原创 2017-03-24 14:18:04 · 521 阅读 · 0 评论 -
使用Vector模拟实现STL中的stack
**成员函数**:(1)stack::stackstack ( const Container& ctnr = Container() );用于构造一个栈适配器对象(2)stack::emptybool empty ( ) const;判断是否为空(3)stack::popvoid pop ( );在栈的顶部移除元素(4)stack::push原创 2017-03-24 14:44:53 · 2009 阅读 · 0 评论 -
使用List模拟实现STL中的Queue
(1)T& back()返回队列最后一个元素(2)const T& back()const返回队列最后一个元素(3)bool empty()const如果队列为空,返回true,否则返回为false(4)T& front()返回队列第一个元素const T& front()const返回队列第一个元素(5)void pop()移去队列中的第一个元素原创 2017-03-24 15:05:59 · 818 阅读 · 0 评论 -
STL Containers
本文转载:http://blog.csdn.net/byxdaz/article/details/4633826 STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指转载 2017-03-24 15:36:19 · 1010 阅读 · 0 评论 -
C++之模板函数
模板函数特化形式如下:(1)、关键字template后面接一对空的尖括号<>(2)、再接模板名和一对尖括号,尖括号中指定这个特化定义的模板形参(3)、函数形参表(4)、函数体template<>返回值 函数名<Type>(参数列表){// 函数体}原创 2017-03-15 19:35:41 · 319 阅读 · 0 评论 -
如何判断文件是否读到文件结尾
二进制文件:头文件:#include #define feof(_stream) ((_stream)->_flag & _IOEOF)feof()函数用来检测当前文件流上的文件结束标识,判断是否读到了文件结尾,其原型为: int feof(FILE * stream);【参数】stream为文件流指针。【返回值】检测到文件结束标识返回1,否则返回0。原创 2017-04-10 22:32:44 · 13007 阅读 · 0 评论 -
字符串个数
给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续 出现的个数+字符”。 比如字符串AAAABCCDAA会被编码成4A1B2C1D2A#include<iostream>#include<string>using namespace std;int main(){ char str[10001] = {0}; cin>>str; int count = 1原创 2017-03-15 22:04:48 · 529 阅读 · 0 评论 -
智能指针应用
1、在可以使用 boost 库的场合下,拒绝使用 std::auto_ptr,因为其不仅不符合 C++ 编程思想,而且极容易出错。 2、在确定对象无需共享的情况下,使用 boost::scoped_ptr(当然动态数组使用boost::scoped_array)。 3、在对象需要共享的情况下,使用 boost::shared_ptr(当然动态数组使用boost::shared_array)。转载 2017-04-01 15:55:20 · 732 阅读 · 0 评论 -
C++类型萃取
#include <iostream>using namespace std;struct _TrueType{ static Get() //使用static修饰成员函数的话,访问该成员函数的话可以用通过类作用域访问,//不使用static修饰成员函数的话,访问该成员函数,要先进行对象的创建,然后用成员操作符访问 { return true; }};原创 2017-03-27 21:35:02 · 301 阅读 · 0 评论 -
全排列
从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。如1,2,3三个元素的全排列为: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 共3*2*1=6种 3!公式: 全排列数f(n)=n!(定义0!=1)原创 2017-04-19 16:22:05 · 288 阅读 · 0 评论 -
库函数实现全排列
template<class BidirectionalIterator> bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last );原创 2017-04-19 18:46:16 · 478 阅读 · 0 评论 -
next_permutation函数(全排列)
以下为转载内容,转自:http://leonard1853.iteye.com/blog/1450085 1、碰到next_permutation(permutation:序列的意思)今天在TC上碰到一道简单题(SRM531 - Division Two - Level One),是求给定数组不按升序排列的最小字典序列(Sequence of numbers A is lexicographi转载 2017-04-19 20:03:01 · 1021 阅读 · 0 评论 -
解析.bmp文件的结构
BMP文件组成:BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成 BMP文件头:BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置其结构定义如下: typedef struct tagBITMAPFILEHEADER { WORDbfType; // 位图文件的类型,必须为BM DWORD bfSize; // 位图文件的大小,以字节为单位原创 2017-04-09 20:55:34 · 434 阅读 · 0 评论 -
二进制文件和文本文件的区别
文本文件与二进制文件的定义 文本文件:是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码等等。 二进制文件:是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码。 从上面可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8)。而二进制文件可看成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。原创 2017-04-10 22:19:10 · 4947 阅读 · 0 评论 -
素数的求解方法:
一、朴素判断素数算法就判断素数而言,事实上是非常简单的了。根据定义,判断一个整数n是否是素数,只需要去判断在整数区间[2, n-1]之内,是否具有某个数m,使得n % m == 0。代码可以这么写原创 2017-07-02 23:10:50 · 1288 阅读 · 0 评论 -
虚函数的调用
虚函数怎么调用: (1)先找到虚函数表 (2)从虚表中找到要调用的虚函数。单继承中派生类虚表的形成: 先看下述的代码:#include <iostream>using namespace std;//基类中包含虚函数和普通函数class Base{public: virtual void FunTest1() { cout<<"Base::FunTest原创 2017-03-12 17:44:58 · 5230 阅读 · 2 评论 -
C--异常处理
程序消亡的一般形式:(1)无疾而终(即就是正常退出,例如return 0、点击图标按钮直接退出)(2)自杀(例如:abort()、exit(0))> abort()函数:引发不正常进程的终止,异常终止一个进程,终止当前进程,返回错误码,错误码缺省值是3> 函数原型 : void abort(void); > 函数说明:abort函数是一个比较严重的函数,当调用它时,会导致程序异常终止原创 2017-03-28 19:55:37 · 599 阅读 · 0 评论 -
构造函数
构造函数:是一种特殊的函数,名字与类名相同,创建类对象的时候,由编译器自动调用,在对象的生命周期内仅且调用一次,以保证每个数据成员都有一个合数的初值。(功能由用户定义,在类对象进入作用域时调用构造函数)。class CDate{public: CDate() { } CDate( const int year, const int month, const int原创 2017-02-05 15:08:07 · 323 阅读 · 0 评论 -
C++操作符重载
重载操作符是具有特殊函数名的函数,关键字operator后面接需要定义的操作符符号。操作符重载也是一个函数,具有返回值和形参表。它的形参数目与操作符的操作数目相同,函数调用操作符可以接受任意数目的操作数。使用运算符重载可以提高代码的可读性。返回类型 operate 操作符(参数列表)--不属于任何的类,是全局的函数可以被重载的操作符不可以被重载的操作符注意:原创 2017-02-18 12:39:16 · 401 阅读 · 0 评论 -
String类的拷贝(浅拷贝,深拷贝,写时拷贝)
在复制一个对象的时候并不是真正的把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对象的位置,并把那块内存的Copy-On-Write位设置为1.这样,在对新的对象执行读操作的时候,内存数据不发生任何变动,直接执行读操作;而在对新的对象执行写操作时,将真正的对象复制到新的内存地址中,并修改新对象的内存映射表指向这个新的位置,并在新的内存位置上执行写操作。这个技术需要跟虚拟内存和分页同时使用,好处就是在执行复制操作时因为不是真正的内存复制,而只是建立了一个指针,因而原创 2017-02-27 21:23:55 · 1440 阅读 · 0 评论 -
获取cpu时间精度
C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒 2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒 3 计算时间差使用double difftime( time_t timer1, time_t timer0 ) 4 使用dword GetTickCount() 精确到毫秒 5原创 2017-02-20 10:34:02 · 2093 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数: 只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时使用已存在的同类对象来进行初始化,由编译器自动调用。当用一个己初始化了的自定义类类型对象去初始化,另一个新构造的对象的时候,拷贝构造函数会自动调用—A d1(d)。当类的对象需要拷贝时,拷贝构造函数将会被调用。拷贝构造函数的原创 2017-02-11 18:29:12 · 389 阅读 · 0 评论 -
C++析构函数
特征:a、析构函数在类名(即构造函数名)加上字符~。b、析构函数无参数无返回值。c、一个类有且只有一个析构函数。若未显示定义,系统会自动生成缺省的析构函数。d、对象生命周期结束时,C++编译系统系统自动调用析构函数。e、注意析构函数体内并不是删除对象,而是做一些清理工作。原创 2017-02-11 18:30:21 · 405 阅读 · 0 评论 -
C++实现动态顺序表
#include using namespace std;#include #include typedef int DataType;class Vector{public: explicit Vector() :_pData(new DataType[3]) ,_capacity(3) ,_size(0) {} //n个值为data的数据 expli原创 2017-03-02 13:30:27 · 403 阅读 · 0 评论 -
C++实现双向链表
#include using namespace std;#include #include typedef int DataType;struct Node{ Node(const DataType& data) //创建一个数值为data的节点 : _pNext(NULL) , _pPre(NULL) , _data(data) {} Node* _p原创 2017-03-02 13:41:06 · 338 阅读 · 0 评论 -
引用和指针
指针和引用的区别1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:int a=1;int *p=&a;//定义了一个整形变量和一个指针变量p,p的值是a存储单元的地址。 int a=1;int &b=a;//定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。(2)指针可以有多级,但是引用只能是一级(int原创 2017-01-24 13:03:31 · 329 阅读 · 0 评论 -
函数调用约定及函数名修饰规则
几种调用约定的区别:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,2、_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函原创 2017-01-25 17:53:46 · 978 阅读 · 0 评论 -
this指针
this指针特性:1.this指针的类型: 类类型 * const2.this指针并不是对象本身一部分,不影响sizeof结果.3.this作用域在类成员函数内部.4.this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不可传递.5.只有在类的非静态成员函数中可以使用this指针,其他人和函数不可以.原创 2017-01-26 13:30:00 · 456 阅读 · 0 评论 -
C++虚函数
1.虚函数的作用: 允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。基类于派生类中有同名函数:#include <iostream>using namespace std;#include <string>//声明基类Studentclass Student{public: Student(int num, str原创 2017-03-09 15:19:29 · 206 阅读 · 0 评论 -
C++继承
C++继承分为公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。 在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 基类和派生类的关系: 派生类是基类的具体化,而基类是派生类的抽象化。原创 2017-03-06 22:34:19 · 295 阅读 · 0 评论 -
进制间转换的小窍门
当值x是2的非负整数n次幂时,即就是2^n, 我们很容易将x写成十六进制的形式,只要记住是x的二进制表示就是1后面跟n个0. 十六进制数字0代表4个二进制0. 因此,当n表示成i+4j的形式,其中0<=i<= 3时,我们可以把x写成开头的十六进制数字为1(i=0),2(i=1),4(i=2)或者8(i=3),后面跟着j个十六进制的0。原创 2017-03-27 21:37:18 · 1642 阅读 · 0 评论 -
类模板模拟实现STL中Vector
具体的用法:(1).PushBack 在数组的最后添加一个数据(2).PopBack 去掉数组的最后一个数据 (3). [] 得到编号位置的数据(4).Begin 得到数组头的指针(5).End 得到数组的最后一个单元+1的指针(6).Front 得到数组头的引用原创 2017-03-20 22:45:18 · 479 阅读 · 0 评论 -
C++纯虚函数
在成员函数的形参后面写上=0,则成员函数为纯虚函数。纯虚函数声明: virtual 函数类型 函数名 (参数表列) = 0;class Person{ virtual void Display () = 0; // 纯虚函数protected : string _name ; // 姓名};class Student : public Person{};原创 2017-03-11 10:00:02 · 46825 阅读 · 2 评论 -
内存泄露、内存溢出以及解决方法
内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界;尤其是对缓冲区写操作时,缓冲区的溢出很可能导致程序的异常。A) 比如在程序中多使用strcpy_s、memcpy_s等具有缓冲区大小检查的函数,去取代strcpy、memcpy等;B)给工程设置编译选项/WX开启(“将警告视为错误”),严格要求自己,这样很可能避免了不少潜在的bug;C) 对自己的代码做好单元测试转载 2017-07-03 11:28:24 · 2503 阅读 · 0 评论