
C++
文章平均质量分 76
晶凌玄夜
这个作者很懒,什么都没留下…
展开
-
vector的模拟实现
vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小。为了增加存储空间,其做法是,分配一个新的数组,然后将全...原创 2020-04-19 10:56:39 · 214 阅读 · 0 评论 -
直接采用huffman压缩思想的缺陷及改进
上一篇我们对自己实现的基于GZIP的压缩算法进行测试,对于有些文件压缩效率还是可观的,不过,直接采用huffman压缩思想却存在一定缺陷。缺陷:①需要创建huffman树,如果不同种类字节出现比较多的情况下,huffman树会很大。比如:待压缩文件中有250个不同字符种类(一个字节能表示最多256个不同的字节),该250个字节都在huffman树叶子节点的位置,那么将来会有(250 + 24...原创 2020-03-12 00:02:19 · 3578 阅读 · 0 评论 -
基于GZIP压缩算法的模拟实现
ZIP压缩的历史1977年,两位以色列人Jacob Ziv和Abraham Lempel,发表了一篇论文《A Universal Algorithm forSequential Data Compression》,一种通用的数据压缩算法,所谓通用压缩算法指的是这种压缩算法没有对数据的类型有什么限定,该算法奠基了今天大多数无损数据压缩的核心,为了纪念两位科学家,该算法被称为LZ77,过了一年他们...原创 2020-03-11 23:49:32 · 703 阅读 · 0 评论 -
C++string类详解及部分函数实现
string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;不能操作多字节或变长字符的序列在使用string时,必须包含头文件和命名空间...原创 2020-03-09 20:31:03 · 292 阅读 · 0 评论 -
C++只能在栈上或堆上创建对象
只能在堆上创建对象方法一:构造函数私有化将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建class only_heap1{public: static only_heap1* create(int k) //有参 { return new only_heap1(k); } static...原创 2020-01-31 23:12:42 · 344 阅读 · 0 评论 -
C++模板之分离编译
1 什么是分离编译一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。2 模板的分离编译假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义:head.htemplate <class T>T Add(const T& left, const T&am...原创 2020-01-14 21:37:31 · 315 阅读 · 0 评论 -
C++类模板特化应用之类型萃取
1.使用memcpy拷贝template<class T>void Copy(T* dst, const T* src, size_t size){ memcpy(dst, src, sizeof(T)*size);}int main(){ // 试试下面的代码 std::string strarr1[3] = { "11", "22", "33" }; std::...原创 2020-01-14 20:39:03 · 280 阅读 · 0 评论 -
C++模板特化
1. 非类型模板参数1.1 模板参数分为类类型形参与非类型形参。①类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。②非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。注意:① 浮点数、类对象以及字符串是不允许作为非类型模板参数的。② 非类型的模板参数必须在编译期就能确认结果。2.模板的特化2....原创 2020-01-14 20:23:39 · 160 阅读 · 0 评论 -
C++模板初阶
1.函数模板1.1 函数模板概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。1.2 函数模板格式template<typename T1, typename T2,…,typename Tn>返回值类型 函数名(参数列表){}注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用str...原创 2019-12-24 17:58:47 · 115 阅读 · 0 评论 -
C++友元和内部类
一、友元1.1 友元分为:友元函数和友元类友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。1.2 友元函数:友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。说明:① 友元函数可访问类的私有成员,但不是类的成员函数② 友元函数不能用const修饰③ 友元函...原创 2019-12-23 19:24:42 · 380 阅读 · 0 评论 -
C++类和对象之静态成员详解
1.静态数据成员如果想在同类中的多个对象之间实现数据共享,可以用静态的数据成员,静态数据成员是一种特殊的数据成员,以关键字static开头注意:1)静态数据成员不属于某个对象,它是在内存上单独开辟空间2)静态数据成员被该类的每一个对象共享3)静态数据成员不能在初始化列表进行初始化,只能在类外初始化4)可以使用类名来引用,也可以通过对象名来引用。class A{public: ...原创 2019-11-20 21:09:23 · 1146 阅读 · 0 评论 -
C++实现顺序表(模板类)
C++实现动态(可扩容)顺序表.h—头文件#pragma once#include<iostream>#include<cassert>using namespace std;template<class T>class Seqlist{private: T* _array; size_t _capacity;//容量 size_t ...原创 2019-10-13 14:36:10 · 1353 阅读 · 0 评论 -
c++缺省参数
缺省参数概念:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。void TestFunc(int a = 0){cout<<a<<endl;}int main(){TestFunc(); // 没有传参时,使用参数的默认值TestFunc(10); // 传参时,使用指定的实参...原创 2019-05-13 22:31:45 · 456 阅读 · 0 评论 -
c++函数重载
函数重载概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题int Add(int left, int right){return left+right;}double Add(double left, double right){return...原创 2019-05-13 22:58:29 · 212 阅读 · 0 评论 -
c++引用
引用概念:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;void TestRef(){int a = 10;int& ra = a;//<====定义引用类型cout<<&a<<endl;cout<&l...原创 2019-05-15 12:49:06 · 125 阅读 · 0 评论 -
C++类和对象(一)
1.类与对象的初步认知:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。3.类的定义class className{// 类体:由成员函数和成员变量组成}; //...原创 2019-08-29 22:08:03 · 167 阅读 · 0 评论 -
C++类和对象(二)
1.类的实例化用类类型创建对象的过程,称为类的实例化类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际的内存空间来存储它一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存...原创 2019-08-31 21:53:52 · 199 阅读 · 0 评论 -
C++类和对象(三)之构造函数
1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date {};2. 构造函数2.1 概念:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.2 特性构造...原创 2019-08-31 23:31:37 · 276 阅读 · 0 评论 -
C++类和对象(三)之析构函数
1.概念: 与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而 对象在销毁时会自动调用析构函数,完成类的一些资源清理工作.2.特性析构函数是特殊的成员函数。其特征如下:析构函数名是在类名前加上字符 ~无参数无返回值。一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。对象生命周期结束时,C++编译系统系统自动调用析构函数。析构...原创 2019-09-13 17:54:01 · 421 阅读 · 0 评论 -
C++类和对象(三)之拷贝构造函数
1.概念: 构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。2.特征拷贝构造函数是构造函数的一个重载形式。拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用。若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝,或者...原创 2019-09-15 14:56:52 · 476 阅读 · 0 评论 -
const关键字
1.const在C语言中默认外连接,在C++中默认内连接C++中可用extern关键字,此时与C语言一样的效果内连接:链接器在链接的时候不会与其他obj文件比较外连接:链接器在链接的时候会与其他obj文件比较是否重定义。2.C++中const定义一个常量后,在编译时完成替换,不会分配空间,而将其写入符号表,当涉及到空间时才分配;而C语言中const修饰的是一个变量。所以C语言中,arr[n...原创 2019-09-18 13:40:06 · 161 阅读 · 0 评论 -
c++命名空间的使用
1、命名空间关键字:namespace 形式:namespace N(N为空间的名称)namespace N1{ // 命名空间中的内容,既可以定义变量,也可以定义函数 int a; int Add(int left, int right) { return left + right; }}命名空间可嵌套:namespace N2{ int a=20; ...原创 2019-04-26 11:23:13 · 213 阅读 · 0 评论