C/C++
文章平均质量分 58
TheShyclear
欲戴皇冠,必承其重
展开
-
C和C++——动态数组的申请
这里呢我们主要是针对二维数组的动态申请,而进行的讲解,我们可以做到随时申请,随时释放。下面我将代码分为三部分:1.空间(数组)申请函数2.空间(数组)释放函数3.数组输出函数./*制作题目:动态开辟数组制作时间:2018-7-20制作人 :TheShyclear内容信息:1.采用C中的malloc / free 实现一维二维数组的动态开辟2.采用...原创 2018-07-20 20:07:59 · 10490 阅读 · 0 评论 -
C++ STL库—— 基础泛型算法copy
copy 函数原型:template<class _InIt, class _OutIt> inline _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest) { // copy [_First, _Last) to [_Dest, ...) _DEPRECATE_UNCHECKED(copy, _Dest)...原创 2018-11-03 13:48:14 · 553 阅读 · 0 评论 -
C++ STL库 泛型算法 find 和 find_if
一:find()函数函数原型:template<class _InIt, class _Ty> _NODISCARD inline _InIt find(_InIt _First, const _InIt _Last, const _Ty& _Val) { // find first matching _Val _DEBUG_RANGE(_First, _La...原创 2018-11-03 14:38:08 · 899 阅读 · 0 评论 -
C++ ——函数调用栈 解析
这篇博客,我们来了解一下函数是如何传参?,函数返回值 如何返回?,以及他们的栈帧的开辟。首先我们先来看一个简单的函数调用。int fun(int a,int b){ return a+b;}int main(){ int a = fun(10,20); return 0;}将汇编代码执行到函数调用的地方查看函数调用参数带入的指令。int m...原创 2018-11-07 15:57:00 · 2026 阅读 · 0 评论 -
详谈const 与指针 引用 (二)
const修饰的对象不能变!!!一:const与一级指针int* p1 = &a; int * q1 = &a const int *p2 = &a const int * q2 = &a int * const p3 = &a int* const q3 =&a 使用情况判断:一组:p1 = q1 ...原创 2018-11-13 16:06:25 · 117 阅读 · 0 评论 -
设计模式——单例模式
简介: 单例模式是一种常用的软件设计模式,其定义是单例对象的类 只允许一个实例存在。许多时间我们系统只需要拥有一个全局对象,这样有利于我们协调系统的整体的行为。单例模式(Singletion) 保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。基本实现思路: 单例模式要求类能够有返回对象的一个接口 和 一个获得该实例的接口(静态方法)①,该类的构造方法定义...原创 2018-11-24 11:45:08 · 157 阅读 · 0 评论 -
C++ 11 --智能指针
为什么会出现智能指针?? 在编写C++程序代码的过程中,往往都会涉及到堆内存的开辟和释放,使用new和delete关键字,特别是堆内存上的释放是通过程序员手动完成的,它不像栈内存上,只要生存周期结束了即可由系统自动回收。 但是很多粗心的程序员,由于各种情况可能忘记手动释放堆内存或因为一些细节原因而未进行堆内存的释放,最终导致产生大量的内存泄漏,造成资源浪费,因此智能指针出来了。什么...原创 2019-01-13 21:02:39 · 257 阅读 · 0 评论 -
C++构造函数 初始化列表 的神秘之处
首先了解类对象的构造顺序是怎样的:1.分配内存,调用构造函数时,隐式/显式的初始化个数据成员(构造函数列表的初始化方式不是按照列表的顺序,而是按照变量声明的顺序同时初始化显隐 数据成员);2.进入构造函数后在构造函数中执行一般赋值与计算。使用初始化列表的原因: 一:只能使用初始化列表 1.初始化 const 修饰的类成员(常变量) 或 初始化引用成员数据;(因为这些...原创 2019-01-14 22:04:30 · 245 阅读 · 0 评论 -
C++ 11 Lambda表达式
C++ 11的几大新特性为:引入了lambda表达式;改进了智能指针......。利用Lambda表达式,更方便的定义和创建匿名函数。这项新功能的添加同样也是用来缩短了(调用代码)距离,简洁,效率,功能性都有提升,下面详细介绍。C++声明Lambda表达式[ capture list ] ( params list ) mutable exception -> return t...原创 2019-01-16 17:28:32 · 495 阅读 · 0 评论 -
详细了解C++多态
什么是多态??1.多态性(polymorphism)据说最早来自希腊语,从字面上理解就是多种形态,多种形式。具体到C++这种面向对象的语言(OOP)中,其实就是一种“接口”,多种实现(方法)。2.多态可以分为静多态和动多态,具体的分类如下:3.静多态和动多态的区别:其实只是区别什么时间将函数实现和函数调用关联起来,是在编译期还是在运行期,即函数地址是在早绑定还是晚绑定的??...原创 2018-10-30 19:28:12 · 2972 阅读 · 2 评论 -
八大排序———希尔排序
希尔排序(Shell's sort)是插入排序的一种 又称为“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是不稳定的排序算法。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键字越来越多,当增量减少至1时,整个文件恰被分为一组,算法终止。 希尔排...原创 2018-10-10 19:30:09 · 326 阅读 · 0 评论 -
C++中的写时拷贝技术
一:概念解释 当我们在构造一个对象时,我们需要把所有的成员变量和成员方法都要统统的给这个对象构造出来,那么如果这个对象我们别不需要对它进行读取和修改的操作,那么我们是不是可以采用一种写时拷贝技术来减少内存的消耗?二:代码分析#include<iostream>using namespace std;#include<string>class CStri...原创 2018-09-29 15:54:14 · 287 阅读 · 0 评论 -
C++类对象——拷贝构造函数
一:什么是拷贝构造函数? 顾名思义拷贝构造就是先拷贝一个已经存在的对象,然后构造另一个对象。 用来复制对象的,在使用这个对象的示例来初始化这个对象的一个新的示例。二:为什么要用到拷贝构造函数? 通俗易懂地来说就是为了来定义初始化一个与已经存在的对象相同的对象,但是这里要注意:他们所获得的资源不同!我们在C中用一个已经存在的变量去初始化另一个变量是:int a = b;那么应...原创 2018-08-12 12:00:17 · 2228 阅读 · 0 评论 -
C++ --------inline关键字
1.inline函数简介:定义:由inline关键字来定义 引用的原因:用他来代替C中复杂易错不用维护的宏函数。 2.编译器对inline函数的处理方法 编译器是在编译阶段对inline函数作出处理,将调用动作替换为函数的本体,但是他只是一种建议,编译器可做可不做。其逻辑处理方式一般采取如下措施:1.将inline函数体复制到inline函数的调用点处,...原创 2018-09-06 22:13:19 · 280 阅读 · 0 评论 -
C++ 中等号运算符的重载(一)
一:存在的原因 在系统的基础基本类型中,比如int , double等,我们定义一个变量,它 的赋值操作可以直接用=来计算int a ;int b = 10;a = b;//可以直接用=来操作 但是在C++中,对类对象进行操作时,我们就不能只是简简单单地,对类对象用=进行操作。当我们没有自己设计等号运算符的重载函数,编译器会自动生成一个浅拷贝的赋...原创 2018-09-20 09:20:49 · 21937 阅读 · 2 评论 -
八大排序———选择排序
一:选择排序的原理 n个数据的文件可经过n-1趟直接选择排序得到有序结果。 ①初始状态:无序区 R[1....n] ,有序区为空。 ②第一趟排序:在无序区R[1....n]选出下标最小的记录R[1],通过比较获得无序区中最小的,将他与无序区的第一个记录R[1]交换,使得R[1..1]和R[2...n]成为新的有序区域,和新的无序区域。 ③第i趟排序:第i趟开始时,有序区域R[1....原创 2018-10-01 13:31:06 · 136 阅读 · 0 评论 -
八大排序———插入排序(及优化)
一:直接插入排序的原理 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数据,插入后使该数据序列仍然有序。算法适用于少量的数据排序,时间复杂度为O(n^2),是稳定的排序算法。 关键码:是数据元素中某个数据项的值,用于标识一个数据。例如:一个学生的信息就是一条记录,它包括学号,姓名,性别等,学号是关键码。 稳定性:若待排序的记录中,存在两个或两个...原创 2018-10-03 09:47:38 · 1869 阅读 · 0 评论 -
八大排序——冒泡排序
一:冒泡排序算法原理 1.比较相邻元素,如果第一个比第二个大,则交换他们(从小到大排序)。 2.对每一对相邻的元素做同样的工作,从开始的一对最后一对,从而最后一个元素必定是最大的。 3.对于所有元素重复以上过程,除了最后一个。 4.进行完每一趟 的比较时,对越来越少的数字进行上述排序,知道最后没有任何一个数字需要比较。 第一趟比较之后:15 48 85 5 19...原创 2018-09-27 11:09:09 · 209 阅读 · 0 评论 -
八大排序———快速排序
背景介绍:快速排序(Quicksort) 是对冒泡排序的一种改进。 快速排序由C.A.R.Hoare在1962年提出。它的基本思想是: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,将整个排序过程可以递归进行,依次达到整个数据变成有序序列。 一:算法思想 ...原创 2018-10-05 14:13:28 · 206 阅读 · 0 评论 -
八大排序———堆排序
堆排序算法原理: 1.堆排序说明:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定的索引元素。堆分为大根堆和小根堆,是完全二叉树。大根堆要求每个节点的值都不大于其父节点的值。在数组的非降序排序中,使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定是在堆顶。 2.算法描述:(建堆 -》调整堆 -》堆排...原创 2018-10-18 10:54:54 · 152 阅读 · 0 评论 -
__attribute__ ((__packed__)) 关键字
该关键字的作用:可以让结构体,按照紧凑排列的方式,占用内存,例如#include <stdio.h>#include <iostream> using namespace std; struct test1 { char c; int i;}; struct __attribute__ ((__packed__)) test2 { ...原创 2019-08-19 17:55:45 · 671 阅读 · 0 评论