
C++
文章平均质量分 94
Nemo丶
我见青山多妩媚,料青山见我应如是。
展开
-
类与对象_3
构造函数 首先讨论下什么是构造函数*? 它是创建对象时,给成员变量赋初始值的一个函数。 通常情况下我们会这样为变量赋初值: //假设一个日期类 Date(int year, int month, int day) { _year = year; _month = month; _day = day; } 但这里并不是初始化,因为初始化只能初始化一次,而...原创 2018-12-09 23:32:46 · 230 阅读 · 0 评论 -
模板化编程
模板概念: 最初设计C++时,template称为被参数化的类型。参数化是因为类型的相关信息可以从template定义中剥离。类型是指每一个类模板或函数模板基本上都随着它作用或它所内含的类型而有性质上的变化。 而后template被通俗的称为模板。作用:可以根据用户指定的特定类型或特定值,自动产生一个函数或类。实现模板: 在学习或是做题中我们...原创 2019-05-08 22:55:16 · 1158 阅读 · 0 评论 -
C++的多态性
概述 多态性是面向对象编程中的重要特征之一。其是用父类型别的指针(或引用)指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种由于调用子类的不同可以让父类的指针有“多种形态”,这是一种泛型技术。 多态实现方式:函数重载 运算符重载 虚函数多态实现 多态分类 1.编译时多态(静态联编) : 通...原创 2019-05-09 21:14:01 · 3692 阅读 · 0 评论 -
C++的类型转换
在C++中,类型转换可分为"隐式类型转换" 和 "强制类型转换"。隐式类型转换 隐式转换会发生在以下几种情况中:将一种算术类型值赋给另一种算术类型变量; 同一表达式包含不同的数据类型; 传递参数给函数时; 函数返回表达式的类型与函数返回值类型不一致时。 初始化和赋值时进行的转换 在编译器实现以下代码: char a = 'a'; int...原创 2019-05-10 20:40:35 · 403 阅读 · 0 评论 -
String类的实现
C++中为我们提供了字符串类型(string),使得我们在处理字符串时非常方便。在此将实现我们常用的方法。 头文件:#pragma once#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <assert.h>usi...原创 2019-05-21 01:06:00 · 317 阅读 · 0 评论 -
模板的特化和萃取
之前对模板化编程进行了总结(详见https://blog.youkuaiyun.com/timecur/article/details/89949643)。这篇将介绍模板的重要概念---模板特化。模板的特化 模板针对某些具体的类型不能处理或者处理结果有误,就需要进行模板特化。// 例如一个比较两元素大小的模板template<class T>T& Max...原创 2019-05-11 18:05:22 · 736 阅读 · 0 评论 -
实现序列式容器 ---- vector
概述: 在STL诸多容器中vector一定是使用率最高的了,它使用和数据结果上与array相类似,两者唯一差别在于:array是静态空间,而vector是可变空间。因此通常将vector看作可变数组。 由于vector方法较多,在主要此讨论实现vector中要注意的几个点: vector的迭代器: 对于vector而言维护的是一连续线性空间,所以不...原创 2019-05-30 23:27:29 · 170 阅读 · 0 评论 -
STL --- 空间配置器
引言:由于整个STL的操作对象都存放在容器之内,而容器一定需要配置空间来放置资料,所以引入了空间配置器。思考:为什么要有空间配置器,而不直接在使用时申请空间? 1. 内存空间碎片化问题 一般在申请空间时,系统将分配足够使用的一段连续空间,由于频繁分配、释放尤其是小块内存,就更容易造成空间碎片的问题(危害:即使内存空间刚好满足一个请求,但由于内存空间分散...原创 2019-07-07 21:30:55 · 207 阅读 · 0 评论 -
虚函数表结构
虚函数表所谓虚函数表就是存放着当前类中所有虚函数地址的表。在实例化一个具有虚函数的类时,这个表也被分配到这个实例对象的内存中,通过虚函数表可以指明所要调用的函数的位置。在C++编译器中虚函数表的地址存放在对象的最前面,这是为了即使多继承下也能快速获取到虚函数表。我们可以通过下示的代码简单看下虚函数表结构:class Base{public: virtual void A(){co...原创 2019-07-15 18:45:41 · 5074 阅读 · 0 评论 -
迭代器
迭代器概述迭代器是一种抽象的设计概念,在设计模式中iterator模式被定义为:提供一种方法,可以按序访问某一聚合物(容器)所含元素,且不暴露该聚合物的内部表达方式。在STL中,迭代器又起着将容器与算法联合到一起的作用。#include <iostream>#include <vector>#include <list>#include &l...原创 2019-07-11 18:43:10 · 4883 阅读 · 0 评论 -
堆区内存分配
通常我们在动态开辟内存时,会使用malloc函数在堆区开辟空间。#include <stdlib.h>void *malloc(size_t size);// 成功返回已开辟空间的地址,否则返回NULL堆区如图堆区在未初始化的数据区(.bss)之后的开始,用于程序员动态开辟释放的数据区。为了减少内存碎片、降低系统调用开销,系统会为堆区分配一大块内存,将堆区分为多个不...原创 2019-07-17 17:49:13 · 2719 阅读 · 0 评论 -
type_traits
概述type_traits提供了丰富的编译期间计算、查询、判断、转换和选择的帮助类,其被定义在#include <type_traits>下。作用:增强了泛型编程能力; 增强程序的弹性,使得在编译期间就可以做到优化、改进甚至排错,提高代码质量; 它所提供的选择功能一定程度上可以消除冗长的if-else或switch-case语句,降低程序的圈复杂度,提高代码的可...原创 2019-07-29 18:31:00 · 2823 阅读 · 0 评论 -
static关键字
在C++中static关键字可以用来修饰变量、函数、代码块。被static修饰的数据都被存放在静态存储区,整个程序运行期间一直存在。 修饰全局变量 定义方式:在全局变量前加static关键字,全局变量就定义为全局静态变量。初始化:未经初始化的全局静态变量会被自动初始化为0.特点:- 被static修饰的全局变量,其链接属性由默认的external 变为 internal;...原创 2019-07-27 20:02:10 · 178 阅读 · 0 评论 -
引用
引用: 给已存在的变量取别名,不用再另开辟空间{int a = 10;int& ra = a; // &引用标记 ; 引用实体必须存在}const int& ra = a; // 值不能被修改特性:一个变量可以有多个别名 引用类型必须和引用实体同一类型 引用定义必须初始化 一旦引用一个实体,不能再引用其他实体引用与指针在底层处理方式完全相...原创 2019-04-25 20:24:04 · 214 阅读 · 0 评论 -
二叉搜索树底层的实现
二叉搜索树概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值; 2.若它的右子树不为空,则右子树上的所有节点的值都大于根节点的值; 3. 它的左右子树也分别为二叉搜索树。 二叉搜索树的实现: 查找 插入 删除 树中节点的删除相对麻烦,需要作出如下判断:...原创 2019-04-09 17:43:03 · 404 阅读 · 0 评论 -
动态内存管理
C/C++内存分布:内核空间是操作系统使用维护,用户不用对其进行管理。栈又叫堆栈,非静态局部变量/函数参数/返回值等等内存映射段,高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。堆,用于程序运行时动态内存分配。数据段,存储全局变量和静态数据。代码段,可执行的代码/只读常量。C语言动态内存管理方式:从堆上进行动态内...原创 2019-01-13 08:46:57 · 608 阅读 · 0 评论 -
继承之虚拟继承
我们都知道继承有:单继承:一个子类只有一个父类继承关系。多继承:一个子类可以继承两个或更多的父类。菱形继承:两个子类继承同一个父类,而又有子类同时继承这两个子类。然而菱形继承因为这种特性,容易产生数据冗杂和二义性问题。 通过简单例子来理解其产生的问题:class A{public: int _a;};class B : public A{public: int ...原创 2019-01-15 16:32:20 · 648 阅读 · 0 评论 -
C++:仿函数
仿函数概述: 指一个类看上去像个函数,具有类似函数的行为,即是仿函数类。 仿函数实现方式:在类中加入重载括号运算符的方法 --> operator() ,示例如下:#include <iostream>class Example{public: int operator()(int a, int b){ retu...原创 2019-02-24 22:40:41 · 463 阅读 · 0 评论 -
C++:结构体与类
struct: 结构体类型,定义一组具有不同数据类型的数据。定义一个结构的一般形式为:struct 结构名{ 成员表列}; 在C语言中:成员列表中只能添加成员变量。 而在C++中,成员列表不仅能添加成员变量,还能添加成员函数,与class非常相似。class: 对某种类型的对象定义变量和方法。...原创 2019-02-26 23:27:34 · 293 阅读 · 0 评论 -
缺省参数,函数重载,引用,内联函数...
目录缺省参数 (默认参数)函数重载引用常引用内联函数基于范围的for循环指针空值---nullptr缺省参数 (默认参数) 定义:指当函数调用中省略了实参数时自动使用的一个值。 例如: void func(int a = 1){...} 调用 func() 相当于...原创 2018-11-24 15:08:58 · 267 阅读 · 0 评论 -
跳石板
题目描述小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-&g...原创 2019-03-19 14:15:16 · 272 阅读 · 0 评论 -
异常
概念: 是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出异常,让函数的直接或间接的调用者来处理这个错误。 可以理解为问题检测和问题处理相分离的处理方式。 throw:当问题出现时,程序会抛出一个异常。 catch:在想要处理异常的地方,通过异常处理程序捕获异常。 try:其代码块中为受监控、受保护的程序代码块。 补充:try后通常跟...原创 2019-03-30 16:22:20 · 298 阅读 · 0 评论 -
智能指针的实现
概念 智能指针本质是对象,但行为却和指针极其相似。 是存储指向动态分配(堆)对象指针的类,把一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。为什么需要智能指针? 比如在异常学习中我们知道,异常很可能会造成资源泄漏,而且由于C++没有垃圾回收机制,就会导致那些申请了的忘记释放的资源的浪费,所以产生智能指针来解决这些问题。智能指针的使用及原理: RA...原创 2019-03-31 17:00:59 · 2952 阅读 · 0 评论 -
计算编辑距离
链接:https://www.nowcoder.com/questionTerminal/3959837097c7413a961a135d7104c314Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,...原创 2019-03-31 17:39:08 · 938 阅读 · 0 评论 -
基础排序算法(一):冒泡,选择,插入排序及优化
冒泡排序<默认升序>冒泡排序就是每次将当前未排序的序列中最大元素升到最终的位置。具体实现:每次从第一个元素开始: 当cur > next 时,交换两个元素位置; 当cur < next 时,就从next开始继续向下遍历比较。代码实现:template<typename T> void BubbleSort(T arr[], int n...原创 2019-03-31 22:18:20 · 265 阅读 · 0 评论 -
文本相似度
应用现今,文本分类在生活中有非常多的应用: 我们经常使用的百度,每次输入关键词或关键句,搜索系统匹配与输入相似的文本,反馈给我们想要看到的词条; 或是使用的翻译工具,利用语句中每个词的语法和语义来分析,文本相似度直接影响到了翻译语句的准确性; 再就是一些论文检测,通过对两份文本提取的关键词进行相似度分析,得出文本相似度,以检测是否存在文章抄袭的可能。原理大体上文本分类原理可以分为...原创 2019-03-28 09:44:35 · 1243 阅读 · 0 评论 -
聊天室
引言现今,网络聊天是我们生活常见的一种沟通方式,而且社交工具层出不穷。前段时间也爆发了一场“三英战吕布的大戏”,“马桶MT”、“多闪”、“聊天宝”同日向“微信发起挑战”。这足以说明现今社交软件真的是竞争激烈。既然它这么火热,我们是不是应该来深入了解这个聊天系统是什么?怎么实现?PS:在这里所实现的并不能像日常见到的软件那样丰富多彩。没错,就是黑框框,但也足以让我们对聊天系统的技术有启蒙意义...原创 2019-03-28 12:01:40 · 665 阅读 · 0 评论 -
右值引用
本文是对《深入理解C++11》和《深入应用C++11:代码优化与工程级应用》中右值引用部分的总结。概述在C++11中增加了新的类型---右值引用(T&&)。通过它可以实现移动语义和完美转发。作用:主要是避免无谓的复制,节省运算存储资源,提高程序性能。 能够更简洁明确地定义泛型函数。左值&右值概念:左值:能对表达式取地址、或具名对象...原创 2019-07-28 15:14:49 · 734 阅读 · 0 评论