c++
照顾不周
努力中......
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】二叉树(个人补习向)
一.树的概念及其相关1.概念及特点树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;2. 相关定义:节点的度:一个节点含有的子树的个数称为该节点的度;叶子节点:度为0的节点称为叶节点;非叶子节点/分支节点:度不为0的节点;父节点:若一个节...原创 2020-03-21 16:34:08 · 187 阅读 · 0 评论 -
基于LZ77压缩原理实现压缩程序
一.LZ77原理LZ77是基于字节的通用压缩算法,它的原理就是将源文件中的重复字节(即在前文中出现的重复字节)使用(距离,长度)的二元组进行替换。例:mnoabczxyuvwabc123456abczxydefghmnoabczxyuvm(9,3)123456(18,6)defgh二.压缩过程1.将文件中一部分字节先传入自己创建的缓冲区,用于查找重复和压缩。缓冲区分为查找缓冲区...原创 2020-03-19 16:04:39 · 1368 阅读 · 0 评论 -
【数据结构】哈希表及其模拟实现
一.哈希及其概念通过一定的哈希函数,确定元素的存储位置。搜索效率较高,为O(1)负载因子:存储元素个数/总表格长度 若大于一定值需要扩容二.常见的哈希函数直接定址法:hashfunc(date)=A*date+B;【A,B为常数】除留余数法:hashfunc(date)=date%capacity【capacity为表格容量】平方取中法:将数据平方后取中间三位。折叠法:例 1...原创 2020-03-15 11:26:28 · 323 阅读 · 1 评论 -
【数据结构】C++实现(一)
一.顺序表用数组实现。尾插尾删较容易,头插头删需使用循环平移元素。注意插入元素时判断容量,以及扩容方式。#include<iostream>using namespace std;#define SIZE 10template <class T>class seqlist1 {public: seqlist1() :capacity(SIZE) ...原创 2020-02-15 22:18:44 · 247 阅读 · 0 评论 -
【C++】强制类型转换
C++为了加强类型转换的可视性,引入了四种强制类型转换操作符:static_cast、reinterpret_cast、const_cast、dynamic_cast最好不使用强制类型转换!!!!!一.static_caststatic_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。in...原创 2020-01-16 20:20:39 · 1912 阅读 · 0 评论 -
【C++】智能指针详解
智能指针:将对内存的管理交付给对象,当对象析构时就能够清理资源,有效的避免内存泄露问题。(因为原生态指针(T*)管理资源时,若用户忘记释放内存,则可能会导致资源泄露。)下面介绍四种智能指针一.auto_ptr智能指针C++98中经历过三种版本更新。C++11中保留第一版auto_ptr,因为有更好的智能指针出现。1.首先介绍智能指针的三大结构1.RAII:利用对象生命周期来控...原创 2020-01-09 14:16:59 · 1417 阅读 · 0 评论 -
【C++】继承
一.继承的概念及定义1.概念:面向对象程序设计代码复用最重要的手段,在保持原有类(基类)特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,是类设计层次的复用。继承用例class Person{public:protected:string _name = "peter"; // 姓名int _age = 18; // 年龄};/...原创 2019-12-11 13:45:21 · 185 阅读 · 0 评论 -
【C++】I/O流
一.I/O流的概念“ 流 ” :即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述。C++流:是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。二.C++I/O流C++定义了I/O标准类库,这些每个类都称...原创 2019-11-17 21:22:11 · 577 阅读 · 0 评论 -
【C++】模板之模板分离情况
这篇博客讲述模板分离报错原因与解决方法!一.模板分离:即模板的声明写于头文件a.h模板的定义写于源文件a.cpp在main.cpp中使用模板的情况。// a.htemplate<class T> T Add(const T& left, const T& right);// a.cpptemplate<class T> T Add(co...原创 2019-11-17 12:15:31 · 357 阅读 · 0 评论 -
【C++】模板之模板特化
一.模板特化概念与分类1.模板特化概念使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果。就需要对模板进行特化。即:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。2.模板特化分类类模板特化函数模板特化二.函数模板特化(只能为全特化)前情提要:一般不使用函数模板特化,直接用一般函数即可。特化步骤:必须要先有一个基础的函数模板...原创 2019-11-17 11:53:16 · 634 阅读 · 0 评论 -
【c++】模板之(非)类型模板参数
一.模板参数类型模板参数: 出现在模板参数列表中,跟在typename/class后的参数。非类型模板参数:用一个常量作为模板的一个参数。可以将该参数当做常量来使用。二.举例定义一个模板类型的静态数组空间类。template <class T,size_t N>class array1 {public: T& operator[](size_t inde...原创 2019-11-17 11:18:34 · 505 阅读 · 0 评论 -
【C++】list的模拟实现
1.代码#include<iostream>#include<vector>using namespace std;namespace zz { template<class T>struct Node{ Node(const T& data = T()) :_pNext(nullptr) , _pPre(nullptr) ,...原创 2019-10-30 17:07:56 · 380 阅读 · 0 评论 -
【C++】list应用
一.list的底层结构带头结点的双向循环链表二.功能应用1 构造函数//构造函数 list<int> l1; //空 list<int> l2(10, 5); //放置10个5 vector<int> v1{ 1,2,3,4,5 }; list<int> l3(v1.begin(), v1.end());//范围构造 /...原创 2019-10-30 15:00:40 · 349 阅读 · 0 评论 -
【C++】vector迭代器失效
一.迭代器失效原因在STL中vector容器会存在迭代器失效,原因无非以下两种:1.使用容器内函数可能会进行扩容,从而开辟新空间,销毁旧空间,可能会导致迭代器指向非法空间,导致失效。Resize()/reserve()/insert()/assign()/push_back()等方法可能会扩容。2.清空空间导致迭代器失效clear()/resize(0)3.使用erase()进行循环...原创 2019-10-20 13:09:56 · 465 阅读 · 0 评论 -
【C++】vector容器
一.vector容器c++标准库提供的动态顺序表(数组)。二.构造操作 vector<int> v1;//空构造 vector<int>v2(10, 5);//十个5 vector<int> v3(v2);//拷贝构造 int array[] = { 1,2,3,4,5,6,7,8,9,0 };//区间构造 vector<int>...原创 2019-10-19 18:46:40 · 193 阅读 · 0 评论 -
【C++】深浅拷贝大不同
一.浅拷贝仅将指针指向同一块堆空间内容。后果:如果对象涉及到资源管理,多个对象共用同一块资源。调用析构函数时,一个销毁了堆上内容,另一个无法销毁。报错。 string(const string1& s) :_str(s._str) { _pcount = s._pcount; (*_pcount)++; }二.深拷贝开辟一段新的空间,拷贝堆上内容至新空间第...原创 2019-10-13 16:28:07 · 179 阅读 · 0 评论 -
【C++】String类模拟实现
此程序为string类模拟实现,提供了深拷贝方式的拷贝构造函数+赋值运算符重载。具体深浅拷贝的不同之处与实现方式,在下一篇博客。#include<iostream>#include<string>using namespace std;#include<string.h>//构造+拷贝构造+析构+=重载。namespace bite { clas...原创 2019-10-13 16:18:29 · 260 阅读 · 0 评论 -
【c++】日期类相关重载运算符函数实现
一相关思考闰年问题:四年一润,百年不闰/四百年一润;只涉及到二月为28/29天。可写为类内函数,便于调用。相关+,-运算符需要考虑隔好几个月的问题,使用循环解决。二代码#include<iostream>using namespace std; class date {public: date(int year, int mouth, int day) { ...原创 2019-09-22 17:26:16 · 1094 阅读 · 0 评论 -
【C++】类与对象初了解
一.类的引入在C++中,类的概念类似于结构体,但比结构体内可以定义变量,也可以定义函数。1.类的定义class classname { //类体:由成员变量和成员函数组成};//注意;1.若成员函数在类内定义,编译器会当做内联函数处理。class date { void show() { cout << "123" << endl; }}...原创 2019-09-24 12:07:18 · 1262 阅读 · 2 评论 -
【C++】类与对象之默认成员函数
所有类创建对象时会自动生成六个默认函数。但有时候默认函数不能满足需求,可以自己创建对应函数,来代替默认函数。初始化和清理:构造函数 析构函数拷贝复制: 赋值重载函数 拷贝构造取地址重载: 普通对象取地址重载 const对象取地址重载一.构造函数函数名字与类型相同,没有返回值类型。保证每个成员变量...原创 2019-09-24 16:25:57 · 341 阅读 · 0 评论 -
【C++】类与对象补充博(初始化列表+static+友元)
一.初始化列表对于对象创建,可以通过构造函数/拷贝构造函数对成员变量赋初值,也可以通过初始化列表为初始化成员变量。构造函数是给成员变量赋值,可以赋值多次。初始化列表为初始化成员函数。初始化列表:在构造函数/拷贝构造函数定义参数列表后,以:开始,用,隔开成员变量。如下例。class date {public: date(int year, int mouth, int day) ...原创 2019-09-26 20:49:37 · 233 阅读 · 0 评论 -
【C++】泛型编程,让模板带你飞
一.泛型编程不考虑具体数据类型的编程方式泛型编程的意义:泛型编程就是为了代码复用! 是C++中重要的代码复用方式例:如何实现通用的swap函数void swap(int& left, int& right) { int temp; temp = left; left = right; right = temp;}不难想到,用一个通用的模子。具体调用时,再对...原创 2019-09-27 19:28:38 · 678 阅读 · 0 评论 -
【C++】STL简介
1.STL简介STL(标准模板库)C++提供的标准模板库的简称。对常见数据结构的封装+一些通用类型的的算法。顺序表+链表+栈+队列+堆+二叉树+哈希等。与类型无关(函数模板)与数据结构无关STL的重要特性是它不是面向对象的,主要依赖于模版,而不是封装和继承。2.六大常用基本组件1.容器:用来存放元素的一种数据结构本质:对数据结构的一种封装C++98:String:对字符串...原创 2019-09-27 19:53:37 · 272 阅读 · 0 评论 -
【C++】STL中的string类
一.常见构造接口string(); 空对象string(const char* s); s字符串对象string (size_t n,char c); n个c的字符串对象string(const string& s); 拷贝构造函数void teststring() { string s1;//string (); string s2("hello");...原创 2019-09-28 17:05:24 · 274 阅读 · 0 评论 -
【C++】入门教程
一.命名空间1.概念:对标识符的名称(变量,函数)进行本地化,以避免命名冲突或名字污染。2.定义:需用namespace关键字,后面加命名空间名字,后加**一对{}**即可。例:namespace N1{ int a; int Add(int left, int right){ return left + right; }}3.使用1.加...原创 2019-09-16 22:37:50 · 715 阅读 · 0 评论
分享