随笔分类 -  C++

摘要:纸上得来终觉浅,绝知此事要躬行 --- 今天对此话有了实际的领悟。之前学习C++的时候,自以为已经把深复制和复制构造函数等这些知识已经掌握了,但真正写起项目来的时候,还是不能提前考虑这些问题,直到问题出现,然后慢慢找出原因才开始根据以前的知识修改代码。 项目中使用到了这个弧形类/*圆弧类*/class Curve:public Graph{ int pointCount; Point *points;public: Curve(Point *points,int pointCount); Curve(const Curve &_curve); ~Curve()... 阅读全文
posted @ 2014-01-02 11:47 iyjhabc 阅读(669) 评论(0) 推荐(0)
摘要:const其他用法已经比较清楚了,但const函数的概念之前还有点模糊,先记录一下。const int* fun();用于修饰函数返回值,一般用于修饰函数返回指针,防止返回的指针内容被修改。class B{public: int a; void fun() const;};表示fun()是一个const成员函数,它不能修改任何数据成员,也不能调用任何非const成员函数。当在fun内尝试修改a时编译会报错。于是当出现const返回值加const成员函数的时候,要搞清楚了const int* fun() const ;表示它是一个const成员函数,并且返回一个const指针。 阅读全文
posted @ 2013-09-12 16:22 iyjhabc 阅读(140) 评论(0) 推荐(0)
摘要:定义一个类对象时,首先根据初始化列表初始化类的成员(就算没有显式定义初始化列表,编译器也会默认地初始化一次),然后运行构造函数。因此,类成员的构造函数必定先于类的构造函数运行。class A{public: A() { puts("In A"); } ~A() { puts("Out A"); }};class B{public: B() { puts("In B"); } ~B() { puts("Out B"); }};class D{public: D() ... 阅读全文
posted @ 2013-09-08 22:17 iyjhabc 阅读(1525) 评论(1) 推荐(0)
摘要:友元就是让本该不能访问类的私有成员、保护成员的函数或者类,通过声明它为友元的方式,使得他们能够访问这些私有、保护成员。使用友元其实就是破坏封装,应尽量避免使用。友元有多重形式,经常会造成混乱,其实总结来说,就是三种程度的破坏封装:1、声明一个普通函数作为类的友元(最高程度破坏封装)class INTEGER{private: int num;public: friend void Print(const INTEGER& obj);//声明友元函数 INTEGER(){ num=999; }};void Print(const INTEGER& obj)/... 阅读全文
posted @ 2013-09-06 10:34 iyjhabc 阅读(385) 评论(0) 推荐(0)
摘要:在只有虚函数,或者只有虚继承的情况下,各个编译器中对C++的内存模型的实现是一样的。但同时存在虚函数和虚继承时,GCC与VC就会有差别。class Base//4{ int a;};class Base1 :public Base//8{ int a;};class Base2 : public Base//8{ int a;};class Base3//4{ virtual void funa(){}};//两个虚继承分别使用两个指针指向自己的虚基类,然后两个基类有2个int//应为使用了共同的虚基类,base的int只有一个,因此2*4+4+4+4=20//有多个虚... 阅读全文
posted @ 2013-08-29 10:51 iyjhabc 阅读(288) 评论(0) 推荐(0)
摘要:map是一种类型对另外一种类型的映射,主要用于快速查找。STL普通的map是用红黑树实现的,最坏的查找复杂度为log2n。STL也提供使用hashtable实现的map,hash_map。1、创建map stringint;2、插入stringint["abc"]=5;3、查找,查看元素是否存在if(stingint.end()!=stingint.find("xx")){ //STL一贯风格 cout::iterator it=stringint.find("xx");if(it!=stringint.end()){ //STL一贯 阅读全文
posted @ 2013-08-25 22:13 iyjhabc 阅读(353) 评论(0) 推荐(0)
摘要:使用bitset可以方便地进行位操作,并可转为string型和无符号整型。#include <bitset>int main(){ //构造函数 bitset<16> a(3);//整数转二进制 bitset<5> b("101010"); //输出流与随机存取 cout<<b<<" "<<b[1]<<endl; //置位 a.set();//全部置位 b.set(0);//置第一位 cout<<a<<" "<<b& 阅读全文
posted @ 2013-06-18 14:59 iyjhabc 阅读(221) 评论(0) 推荐(0)
摘要:1、sortsort(p,p+n);//C风格数组p[n]sort(ou.begin(),ou.end());//升序排序sort(ou.rbegin(),ou.rend());//降序方法1:反向迭代器,最小元素放末端sort(ou.begin(),ou.end(),is_bigger);//降序方法1:自定义比较函数bool is_bigger(const int &a,const int &b){ return a>b;}2、removeremove()把不需要删除的元素往前移,返回无用元素的第一个迭代器erase(remove(a.begin(),a.end(), 阅读全文
posted @ 2013-05-10 16:02 iyjhabc 阅读(186) 评论(0) 推荐(0)
摘要:STL string1、初始化-把c字符串转换成stringchar s[]="abc e df";string str=s;string str(5,'x');//初始化为5个x2、查找从前开始搜索:str.find(目标子串,开始搜索位置)从后开始搜索:str.rfind如查找不到目标,则返回string::npos3、替换str.replace(开始下标,覆盖长度,替代字符串,可加)当覆盖长度填为0时,其实就是插入操作。4、删除str.erase(开始下标,删除长度)5、插入str.insert(开始下标,插入字符串)6、比较str.compare(与 阅读全文
posted @ 2013-05-10 11:29 iyjhabc 阅读(678) 评论(0) 推荐(0)
摘要:遇上文本处理的话,基本上都是先读取文件,再逐行读取文本,再进行文本分割。1、读取文本使用头文件#include ,包含ifstream-输入流,ofstream-输出流,iostream-输入输出流三种类型的文件流。ifstream iFile;int a;iFile.open(filename);//ifstream默认以读方式打开//do your jobiFile>>a;iFile.close();2、逐行读取char buf[300000];while (!iFile.eof()){// find the end of the file iFile.getline(buf, 阅读全文
posted @ 2013-04-10 10:03 iyjhabc 阅读(4998) 评论(0) 推荐(0)
摘要:内存池STL实现:内存池(Memory Pool)是一种内存分配方式。 通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。 内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是尽量避免了内存碎片,使得内存分配效率得到提升。 在内核中有不少地方内存分配不允许失败. 作为一个在这些情况下确保分配的方式, 内核开发者创建了一个已知为内存池(或者是 &qu 阅读全文
posted @ 2012-12-12 15:42 iyjhabc 阅读(284) 评论(0) 推荐(0)
摘要:转自: http://www.cnblogs.com/caoshenghe/archive/2010/01/31/1660399.html第一部分使用入门vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque或者list更加合适。vector是连续内存容器,换句话说,标准要 阅读全文
posted @ 2012-09-03 21:25 iyjhabc 阅读(215) 评论(0) 推荐(0)
摘要:Trie树就是字典树,其核心思想就是空间换时间。后缀树 suffix tree:http://www.cnblogs.com/snowberg/archive/2011/10/21/2468588.html字典树作用:1、查找单词是否出现2、查找单词第一次出现位置(在最后一个字母节点标记第一次出现位置)3、查找包含前序的单词个数(每新增一个单词进树,所经过的节点的计数器加一)4、将所有单词按字母次序输出举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面 阅读全文
posted @ 2012-09-02 20:17 iyjhabc 阅读(325) 评论(0) 推荐(0)