C++编程
Lonely_Mr_zhang
这个作者很懒,什么都没留下…
展开
-
《CPP入门基础知识》
目录: 命名空间. C++基本的输入输出流. 函数重载. C++缺省参数. 指针和引用. 命名空间: 命名空间的定义: 命名空间的定义是由 namespace关键字开始,后接命名空间名字 name,并在一对花括号中定义成员的。命名空间可以在全局域或其它域中定义( 类和函数内部除外 ),但命名空间的名字在所定义域中是唯一的,并且命名空间与类和结构体不同不以原创 2017-06-26 23:47:15 · 1918 阅读 · 0 评论 -
基于Huffman编码的文件压缩
原理剖析:我们的Huffman文件压缩,是基于Huffman编码实现的,思路如下: 首先,获取原文件中每个字节的值(unsigned char)类型,范围为0-255,并记录每个值出现的次数,以这些值出现的次数为数据,利用贪心算法构建Huffman编码,然后,将对应的字节以其对应的Huffman编码替换达到压缩文件的目的。当然,为了能更好的解压缩我们需要将相应的字节与它们出现的次数也存储在压...原创 2018-04-11 20:23:08 · 611 阅读 · 0 评论 -
《 set/map 的使用 ----STL》
首先,对较简单的begin()、end()、rbegin()、rend() 等成员的介绍做简单的一笔带过。 begin():返回指向集合的第一个元素(升序的第一个元素)的迭代器。 end():返回指向集合的最后一个元素后面(升序,一般为NULL的迭代器)的迭代器。 rbegin()、rend() :类似于begin()、end(),不过返回的为逆向的迭代器。注:以下增删改查都是指在升序下看待。原创 2017-11-24 18:14:52 · 461 阅读 · 0 评论 -
《海量数据处理》
依照冯·诺依曼体系结构,计算机在运行程序的时,必须把程序先加载进内存中,然后CPU才能按照程序的逻辑依次执行。一般情况下,我们PC机的内存是4GB/8GB大小,当我们要处理一些较大的文件并在内存中需要开辟较大的空间(超过我们PC机的物理内存大小4GB/8GB)时,我们并不能随便改变物理内存的大小,此时,我们该如何解决此类问题呢?于是,便引出了今天我们要讨论的——海量数据处理。典例://1)给一个超原创 2017-11-29 15:31:09 · 652 阅读 · 0 评论 -
《“vector+list”的使用——STL》
学习c++语言STL必不可少,今天首先为大家简单介绍下STL中vector和list的使用,其次,再简单模拟下库中的vector和list以方便大家更好的理解STL。vector的使用: 代码:#include<iostream>#include<vector>using namespace std;void Print_Vector(vector<int>& v){ vector<原创 2017-10-11 16:47:24 · 407 阅读 · 0 评论 -
《模板的分离编译问题》
一般情况下,在建立工程时我们喜欢将函数的声明与定义放在不同的文件中(.h/.cpp),这样当我们在编写源文件程序时需要用到其他文件中的函数时只需在本文件中包含进该函数声明所在的头文件便可引用该函数,这种方式也是标准库函数的使用方式,使编程编程效率大大提高,减少了可复用性代码的重复编写,深得人们喜爱,但当学习了C++中模板之后,以类似的方式组织文件时却出现了问题,这究竟又是怎么一回事呢?接下来,我们就原创 2017-08-05 23:27:08 · 972 阅读 · 1 评论 -
《C++大数据运算(+、-、*、/)》
计算机中整数数据的最大类型为long long类型,依据计算机位数的不同它的范围也不同,以32位为例long long类型的取值范围为【-9223372036854775808,9223372036854775807】,那么计算机可以进行的数值运算就必须在这个范围之内吗?未必,所以产生了大数据运算来解决更大范围内的数值运算,它的思想是以字符串代表数值进行各类运算。 Test.c#include原创 2017-08-05 15:19:45 · 3897 阅读 · 0 评论 -
《C++多继承之菱形继承》
导言: java、python等面向对象语言仅支持单继承,而c++语言不仅支持单继承,也支持多继承。c++语言在支持多继承的同时也会带来一些小麻烦——菱形继承。菱形继承: 多继承中的菱形继承之所以得名是因为菱形继承的关系模型像一个菱形而得名。如下图所示: #include<iostream>using namespace std;class A{public: i原创 2017-07-26 13:48:17 · 804 阅读 · 0 评论 -
《C++智能指针》
智能指针的源由: c/c++之所以强大,一部分功劳应归结于c/c++语言对指针的支持,有了指针c/c++便可高效、方便的操纵内存,但大部分事物总是不可避免的具有两面性,指针也不例外。指针可以高效、方便的操纵内存极大的提高了c/c++程序员编程的灵活性,但同时指针也给初级c/c++程序员带来了一些大麻烦,为什么这么说呢?请看下面一个例子://智能指针源由#include<iostream>usi原创 2017-08-09 20:28:56 · 414 阅读 · 0 评论 -
《深、浅拷贝解析(C++)》
引言: 问题:在c++中如果没有显式定义拷贝构造函数,编译系统会生成默认的拷贝构造函数,这种机制方便程序员编写程序的同时也为程序员带来了一些麻烦。当类中含有指针成员变量时,默认的拷贝构造函数会将拷贝函数的指针变量值赋给待拷贝构造函数的指针变量,使两个指针变量指向同一片空间,对象销毁时,析构函数就会释放两次动态分配的空间,从而造成错误。 解决方案: ①深拷贝:当类的成员变量含有指原创 2017-07-24 18:17:35 · 598 阅读 · 0 评论 -
《函数调用时参数、返回值所做的优化处理+编译器NRV优化》
摘要: c++中创建对象以及销毁对象时,会自动调用对象的构造、析构函数(默认的或自定义的),因此,当我们在c++中调用函数时应该特别注意传参以及返回值时的优化处理,以减少构造、析构函数调用时的开销。同时编译器也会针对不同情况的函数调用,在不产生错误的情况下采用“NRV优化”(函数返回时,不产生临时变量)。示例代码:#include<iostream>using namespace std;原创 2017-07-22 01:39:15 · 864 阅读 · 0 评论 -
C/C++动态内存管理
目录:总结并剖析malloc/free和new/delete之间的关系和差异。剖析new/delete和new[]/delete[]做了什么?实现NEW_ARRAY/DELETE_ARRAY宏,模拟实现new[]/delete[]申请和释放数组 剖析malloc/free、new/delete。 它们都是动态管理内存的入口。malloc/free是C/C++标准库的函数,dew/d原创 2017-07-20 10:40:24 · 449 阅读 · 0 评论 -
《C++多态的对象模型之单/多继承、菱形/菱形虚拟继承》
多态: 多态的两个必要条件:①子类中必须重写父类中的虚函数。②父类的引用/指针依据指向的不同对象(父类或者子类)来调用不同的虚函数。即:父类的指针或引用指向父类时,调用父类的虚函数。父类的指针或引用指向子类时,调用子类的虚函数。 多态的单/多继承对象模型:单继承://单继承#include<iostream>using namespace std;typedef void(*VFPT原创 2017-07-29 23:03:03 · 631 阅读 · 0 评论 -
《类和对象+四个默认函数+运算符重载》
类和对象: 基础知识: c++中的类与c中的自定义结构体类型非常相似,但类中比结构体类型多了对数据的操作(成员函数),众所周知c是面向过程的语言,数据与操作是分离的,而c++是面向对象的语言,c++中类充分体现了面向对象的思想,将数据和操作同时封装在类中以提高程序的复用性、灵活性和扩展性。类类似于现实世界中建造大楼的设计图纸,有了图纸我们就可以建造出类似的多栋大楼,建造出来的每栋大楼就类似原创 2017-06-28 01:33:31 · 371 阅读 · 0 评论 -
剖析STL空间配置器
为什么需要空间配置器呢? 原因一:当系统频繁的申请释放内存时,会造成内存碎片问题,导致明明剩余的总内存够需要分配的内存,但是由于这样内存不是连续的,而是一块块的,每一小块又达不到需要分配的内存的大小,所以造成内存碎片问题(外碎片),但是,当我们提前将这些内存按照不同大小组织起来,需要分配时,根据需要分配不同大小的内存,这样便能很好地缓解内存碎片问题(外碎片),但是也引入了内碎片问题。 原因二:...原创 2018-04-11 20:33:24 · 426 阅读 · 0 评论