现在位置: 首页 > 算法 > 文章
2020年01月13日 算法 ⁄ 共 1392字 评论关闭
  一、为什么要使用动态内存分配?   以一个数组为例:在定义一个数组时给定了其内存空间,只要给定足够大的空间,就可以放入你所需的数据元素。但当内存空间小于所需放入的元素个数时,我们就需要给这个内存空间去增容,以此来满足你的需求。   上述定义数组时设置足够大的内存空间看似简单,但却有以下缺点:   1.如果内存空间很大,数据却很少就会使内存空间浪费。   2.如果内存空间不足就会出现溢出的现象。   ...
阅读全文
2020年01月13日 算法 ⁄ 共 940字 评论关闭
  我们在平时写代码中会用到几个函数但是他们的实现功能相同,但是有些细节却不同。例如:交换两个数的值其中包括(int, float,char,double)这些个类型。在C语言中我们是利用不同的函数名来加以区分。   我们可以看出这样的代码不美观而且给程序猿也带来了很多的不便。于是在C++中人们提出了用一个函数名定义多个函数,也就是所谓的函数重载。   一、函数重载是什么意思   函数重载是一种特殊情况,C++允许在同一作用域...
阅读全文
2020年01月13日 算法 ⁄ 共 855字 评论关闭
  一、为什么会产生this指针?   我们可以从上边代码看出,定义了三个对象t1,t2,t3再调用时他们是如何区分自身的height,width,length这时候就需要他们各自的this指针来完成。在调用时系统会把对象t1的起始地址赋给this指针,于是在成员函数引用数据成员时,就按照this的指向找到各自对应的数据成员。(这里可以从反汇编中更好的理解)   由此,我们得出结论 : 将全局的函数放进结构体内,便出现了this指针,该this指针是由ecx...
阅读全文
2020年01月13日 算法 ⁄ 共 850字 评论关闭
  我们知道在C语言中用malloc,realloc,calloc在堆上开辟空间,然后用free来释放空间。使用_alloca在栈上动态开辟内存,栈上开辟的内存由编译器启动维护,不需要用户显示释放。   1、在C++中也有动态内存开辟,利用了new和delete,下边我们了解一下:   int main()   {   //动态分配4个字节的空间单个数据   int* p1 = new int;   //动态分配四个字节的空间并初始化为3   int* p2 = new int(3);   //动态分配12...
阅读全文
2020年01月13日 算法 ⁄ 共 1137字 评论关闭
  虚函数的主要作用是建立抽象模型,从而可以达到方便扩展系统的目的。纯虚函数是指被标明为不具体实现的虚函数,是一种特殊的虚函数。   纯虚函数和虚函数的区别   虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的形式为:   virtual 函数返回值类型 虚函数名 (形参表)   {   函数体   }   虚函数扩展了派生类对象中隐藏基类函数的概念,当程序处于相似...
阅读全文
2020年01月13日 算法 ⁄ 共 3253字 评论关闭
  由于这一部分是讲解 Redis,并没有涉及到分布式架构方面的东西,所以我很纠结要不要写这篇文章,最终我还是决定在这里说一下 Redis 实现分布式锁,在后续文章中还是会涉及到分布式架构的相关知识,这里就当一个引子,主要还是讲解如何使用 Redis 来实现,我会将写的方法封装成一个工具类,对代码进行讲解,由于没有分布式环境,所有没有办法进行测试。   一、程序客户端之 Java 客户端 Jedis   既然到了代码层级,那么...
阅读全文
2020年01月13日 算法 ⁄ 共 898字 评论关闭
  在c++11中,STL中提拱了一个新的容器std::array,该容器在某些程度上替代了之前版本的std::vector的使用,更可以替代之前的自建数组的使用。那针对这三种不同的使用方式,先简单的做个比较:   vector、array和数组的相同点:   1. 三者均可以使用下表运算符对元素进行操作,即vector和array都针对下标运算符[]进行了重载   2. 三者在内存的方面都使用连续内存,即在vector和array的底层存储结构均使用数组   vecto...
阅读全文
2020年01月13日 算法 ⁄ 共 956字 评论关闭
  在了解new和malloc的区别之前,我们首先要知道new和malloc的基本用法,malloc/free是C/C++的标准库函数,函数原型如下,而new是C++的运算符。   malloc函数原型void *malloc(size_t_size);   void* free(void * ptr);   动态开辟内存   malloc: int *p =(int*)malloc(sizeof(int))   free(p)   new: int *p = new int;   delete p;   开辟数组   malloc: int * cpp = (int *)malloc(sizeof(int)*10);  ...
阅读全文
2020年01月13日 算法 ⁄ 共 1577字 评论关闭
  在C++中我们可以看到struct和class的区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。   一.首先看一下C中struct   1.struct的定义   struct A   {   int a;   int b;   //成员列表   };   注意:因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数。否则编译器会报错   面向...
阅读全文
2020年01月13日 算法 ⁄ 共 1719字 评论关闭
  c语言中堆区和栈区的区别是什么?下面就一起来看下。   一、堆区和栈区是什么意思   1、栈区(stack)   由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器会自动接着当前栈区的结尾来分配内存.   2、堆区(heap)   一般...
阅读全文