随笔分类 -  C++

二维指针可以减少双向或单向链表的初始判断。
摘要:比C与指针的代码12.7还少五行。 传二维指针进去,在链表首插入的判断语句可免。 typedef struct doublelinkstu{ int value; string name; doublelinkstu * pre; doublelinkstu * next; doublelinkst 阅读全文

posted @ 2017-08-20 23:03 shoutcharter 阅读(163) 评论(0) 推荐(0)

浮点数转换成二进制的方法
摘要:using namespace std; int main(){ int i; float f=-6.9072; //将float指针转换为字符指针 unsigned char* p=reinterpret_cast<unsigned char*>(&f); cout<<hex;//print by 阅读全文

posted @ 2017-04-09 00:50 shoutcharter 阅读(1894) 评论(0) 推荐(0)

容器 vector :为何要有reserve
摘要:关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足以容纳你放进去的数据。(要知道这个最大值,只要调用名叫max_size的成员函数。)对于vector和string,如果需要更多空间,就以类似realloc的思想来增长大小。vector容器支持随机访问,因此为了提高效率,它内部使用动态数组的方式实现的。在通过 reserve() 来申请特定大小的时候总是按指数边界来增大其内部缓冲区。当进行insert或push_back等增加元素的操作时,如果此时动态数组的内存不够用,就要动态的重新分配当前大小的1.5~2倍的新内存区,再把原数组的内容复制过去。所... 阅读全文

posted @ 2013-08-07 16:56 shoutcharter 阅读(1384) 评论(0) 推荐(0)

容器 MAP
摘要:1.equal_rangepair myresult;myPairDef ps=*MyMap1.begin();myresult= MyMap1.equal_range(ps.first);//=====================================此处只接受键!不接受键值对!!!!!ps=(*myresult.first);coutit2) { return true; } else ... 阅读全文

posted @ 2013-08-07 16:39 shoutcharter 阅读(144) 评论(0) 推荐(0)

超强的字母转换数字
摘要:map m;10 11 for(int i = 0; i < 10; ++i)12 {13 m[i] = '0' + i;14 }在前面加‘0’! 阅读全文

posted @ 2013-08-07 15:40 shoutcharter 阅读(140) 评论(0) 推荐(0)

for_each 用法!
摘要:class MapTest:public CapTest{ private: set MyTestContain; typedef pair myPairDef; typedef map myMapDef; myMapDef MyMap1; public: MapTest(); ~MapTest(){}; void OutPut(); friend void MyOutPut2(myPairDef thispair);};void MyOutPut2(MapTest:... 阅读全文

posted @ 2013-08-07 15:34 shoutcharter 阅读(176) 评论(0) 推荐(0)

容器 SET part2
摘要:(6) insert STL中为什么提供这样的set的insert呢?这个成员函数存在的目的是为了插入效率的问题。函数参数中的 __position 只是一个提示值,表示在这个位置附近(可前可后)。如果要插入的数据其插入后的位置在 __position 附近的话,使用这个函数可以大大节省插入的时间。反之,如果这两个位置离得很远的话,反而没有用 insert(const value_type& )效率高。et类的 insert() 的实现讲起来较复杂,举一个简单的例子来说明吧。设有一排好序的整数序列(不妨假定他们存储在一个整型数组中)如下:0 1 2 2 5 7 12 34 56 89 阅读全文

posted @ 2013-08-07 14:49 shoutcharter 阅读(161) 评论(0) 推荐(0)

容器 set
摘要:SET 是个有序表!他会根据INSERT的数值自动排序!SET里面不可能出现相同的元素!SET在insert的时候会排重的!SET本质上是一种树结构,在检索上比链表快,插入比数组方便,但是不允许重复!(1)set_difference(MyTestContain.begin(),MyTestContain.end(),MyTestContain2.begin(),MyTestContain2.end(), insert_iterator >(MyTestContain3,MyTestContain3.begin()) );insert_iterator > 后面的空格一定要打!in 阅读全文

posted @ 2013-08-06 22:37 shoutcharter 阅读(197) 评论(0) 推荐(0)

容器 list
摘要:(1) 插入操作,不能使用MyTestContain.begin()+3 之类?!(要对数据进行复制) list::iterator pr=MyTestContain.begin(); pr++; pr++; MyTestContain.insert(pr,more,more+3);//插入操作,必须加在队尾?! OutPut();(2)移除操作,只能移除元素 MyTestContain.remove(2);//是移除所有的2?(3)拼接操作(只改变.next指针,不对数据进行复制,也可以实现任意位置的插入,推荐使用) list one(5,2); MyTestContain.splice(M 阅读全文

posted @ 2013-08-06 21:14 shoutcharter 阅读(180) 评论(0) 推荐(0)

迭代器
摘要:1.输出流迭代器 ostream_iterator osi(cout," "); copy(MyTestContain.begin(),MyTestContain.end(),osi); cout<<endl; 但是输出的格式,有点怪啊! 阅读全文

posted @ 2013-08-06 17:50 shoutcharter 阅读(102) 评论(0) 推荐(0)

排序
摘要:partial_sort(MyTestContain.begin()+1,MyTestContain.begin()+3,MyTestContain.begin()+6,Comparefunc);//partial_sort(a b c) 在a->c中排序,选取前b-a个,顺序的!!!放到a->b的位置。 nth_element(MyTestContain.begin()+1,MyTestContain.begin()+5,MyTestContain.end(),Comparefunc); //这个更诡异,文章认为这个函数只是将数据分块,不排序。在a->c中排序,选取前b-a 阅读全文

posted @ 2013-08-06 16:09 shoutcharter 阅读(140) 评论(0) 推荐(0)

extern "C"
摘要:被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;1.未加extern “C”声明时的编译方式2.C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同3.,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。 阅读全文

posted @ 2013-07-31 12:49 shoutcharter 阅读(101) 评论(0) 推荐(0)

基础。。。
摘要:对于指针,要做下面的事情:1. char * mychar2.mychar=(char *)malloc(sizeof(Char)*num);分配了空间之后才能做各种操作如果使用完毕,要做:3.free(mychar)这个太基础了,C#和 C++差距挺大的 阅读全文

posted @ 2013-07-31 10:57 shoutcharter 阅读(113) 评论(0) 推荐(0)

虚基类
摘要:虚基类不允许初始化传递:A{int I;A(inti):I(i){} }B:public virtual A{int J;B(inti,intj):A(i),J(j){}}C:public virtualA{int K;C(inti,intk):A(i),K(k){}}D:C,B{}下面这样是不行的D(inti,intj,intk):B(i,j),C(i,k){}将使用A的默认构造函数,i 没有作用正确的做法:D(int i,int j,int k):A(i),B(i,j),C(i,k){} 阅读全文

posted @ 2013-07-30 21:15 shoutcharter 阅读(135) 评论(0) 推荐(0)

基类方法的反隐藏 反private 秘籍
摘要:class GoodStudent:private Mentor,private Student { public : using Mentor::GetInfo; ///-------------------------------------------基类方法露出来了 GoodStudent(string name,string title,int i):Mentor(name,title),Student(i) {}; // void GetInfo();}; 阅读全文

posted @ 2013-07-30 17:26 shoutcharter 阅读(134) 评论(0) 推荐(0)

NAMESPACE
摘要:限定作用域,比类高,比文件低。cpp 和 h 里面都要用到。 阅读全文

posted @ 2013-07-30 16:49 shoutcharter 阅读(104) 评论(0) 推荐(0)

所谓has a 和 is a
摘要:在 C# 中 很好理解:{ is a: 继承关系。 has a: 成员关系,其他类是本类的成员。}在C++ 中稍微复杂一点:{ 由于有多重继承, 继承也可能是has a,类似C#里面的接口 ; 一般认为 private 和 protected 的是 has a ; public 的是 is a ;)使用多重继承的场合:派生类中,每个基类只有一个对象成员,却需要使用protect 或者 重写 virtual 函数。:即真正意义上的多重继承。PLUS:C# 确实比C++好用,但是学了C++才能更好的理解C#.这就是为什么JAVA能够流行的原因。 阅读全文

posted @ 2013-07-30 16:36 shoutcharter 阅读(230) 评论(0) 推荐(0)

C++ 的多重继承
摘要:不能够从对象访问基类的公开方法,真悲剧!只能在类里面提供公共函数!void Mentor::GetInfo(){ cout>(istream & mycin,Course & myCourse) { mycin>>myCourse.name ; return mycin; }void GoodStudent::GetInfo(){ Mentor::GetInfo(); Student::GetInfo();void GoodStudent::GetInfo(){ Mentor::GetInfo(); Student::GetInfo(); ((... 阅读全文

posted @ 2013-07-30 15:58 shoutcharter 阅读(139) 评论(0) 推荐(0)

c# 与 c++ 编译
摘要:C#的所有方法封装在类中,类的方法没有先后之分,无需声明。//而C++必须在函数调用前,由编译器检查参数类型是否合法,所以必须知道函数的原形(protype),所以必须提前声明函数的签名(signature).也就是你所说的声明。//这个具体涉及到编译原理,C#,C++的编译模型不同 阅读全文

posted @ 2013-07-30 12:12 shoutcharter 阅读(191) 评论(0) 推荐(0)

初始化的顺序:和定义的顺序以及初始化函数都有关系。都要先定义的在前,后定义的在后。甚至连类的顺序都必须这样。
摘要:这种情况是在 codeblocks 里面发生的,但是在NETBEANS 里面没有,在VS里面呢?class Course{ public: int n; Course(int i):n(i){}; Course(); //Course(); virtual ~Course(); private:};class Student{private: typedef std::valarray DBArray; Course mycourse; DBArray scores; int n; int m;public... 阅读全文

posted @ 2013-07-30 10:06 shoutcharter 阅读(119) 评论(0) 推荐(0)

导航