C++
文章平均质量分 57
M_jianjianjiao
这个作者很懒,什么都没留下…
展开
-
c++输入输出
c++输入输出标准输出cout(控制台)标准输入cin(键盘)必须包含 < iostream > 头文件以及std标准命名空间c++ 头文件一般不带.h#include <iostream> using namespace std;int main(){int a; double b;char c;cin>>a; ci...原创 2018-10-22 21:37:56 · 238 阅读 · 0 评论 -
priority_queue优先级队列实现
优先级队列的实现优先级队列,并不遵守先进先出的特性,所以可以说它并不是一个队列。尽管名字上有些想象。优先级队列,主要的特性就是,对存在里面的数据有了一个优先级高低的划分,或者大的优先级高,或者小的优先级高,出队时就根据优先级的高低进行出队。跟据它的出入队特性,我们可以使用堆来对其进行构建。堆在物理结构上是一个连续的数组,可以支持下标的随机访问,而在逻辑上是一颗完全二叉树。通过构建大堆或者小堆...原创 2018-12-04 08:40:42 · 336 阅读 · 0 评论 -
c++中模板的特化
关于模板的特化关于c++函数的模板函数的特化使用模板时会遇到一些特殊的类型需要特殊处理,不能直接使用当前的模板函数,所以此时我们就需要对该类型特化出一个模板函数(就是写出一个模板函数专门给该类型使用)当使用一个判断相等的模板函数时template<class T>bool Isequal(T& p1, T& p2){ return p1 == p2;}...原创 2018-12-23 10:52:17 · 8398 阅读 · 0 评论 -
c++ 类型萃取
类型萃取类型萃取是基于c++中的模板特化来实现的,是对于模板特化的应用。关于c++的模板特化当我们写一个同用的拷贝函数时,我们可以使用mymcpy进行拷贝,但是mymcpy是一个浅拷贝,对于一些基本类型的拷贝效率很高。但是对于要深拷贝的类型来说就不适用了,对于深拷贝我们可以使用for循环的方式来进行。所以将两者进行结合,当基本类型进行拷贝时使用mymcpy,当自定义类型进行拷贝时使用fo...原创 2018-12-23 18:08:51 · 473 阅读 · 0 评论 -
c++中的IO流
C++ 中的IO流c语言中的输入输出说到c++就不能不提c语言,在c语言中,依靠输入输出函数进行IO操作,在c语言中我们常用的函数有scanf printfpusts gets putc getcgetchar putcharfwrite fread...这些IO函数通过一些缓冲区在设备和代码之间进行数据的输入和输出。缓冲区的读写速度较快,设备和代码都能很快的从其中复制数据和写入...原创 2018-12-25 09:01:49 · 1522 阅读 · 0 评论 -
c++中的继承
面向对象的三大特性封装,继承,多态。继承作为三大特性之一,在面向对象的设计的重要手段,它使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。继承呈现了面向对象程序设计的层次结构,继承是类设计层次的复用。到底什么是继承?如果B类继承于A类,那么B类中就拥有了A类中的方法和数据。A类中的方法和数据就成了B类中的一部分,B类对象可以访问到这些数据和方法当然也有一...原创 2018-12-25 23:47:32 · 193 阅读 · 0 评论 -
c++中的菱形继承与虚拟菱形继承
c++中的继承关系分为单继承和多继承单继承:一个派生类只有一个基类多继承:一个派生类不止有一个基类在多继承的过程成容易造成二义性问题。菱形继承是多继承中的一种复杂的情况。菱形继承的有两个问题:二义性:当使用A的数据时无法确定继承自B 还是 C数据冗余:类D中会有两份类A的数据先看一个菱形继承的例子#include <iostream>using names...原创 2018-12-26 13:14:08 · 416 阅读 · 0 评论 -
c++多态的原理 以及虚函数表详解
c++中多态的原理要实现多态,必然在背后有自己的实现机制,如果不了解其背后的机制,就很难对其有更深的理解。一个多态的例子class Person{public: virtual void Drink() { cout << "drink water" << endl; };};class Children : public Person{publi...原创 2019-01-03 14:44:56 · 533 阅读 · 0 评论 -
c++中的多态
c++中的多态什么是多态多态是指有多种形态,具体来说就是一种行为有多种不同的状态。当有不同的对象完成同一个行为时,会产生不同的结果。在c++的调用同一个基类函数,会根据不同的对象的类型来调用不同的成员函数。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。多态的构成条件在c++中要构成多态,必须要满足两个条件:调用函数的对象必须是引用或指针被调用的函数必须是虚函数,且完...原创 2019-01-03 14:46:12 · 222 阅读 · 0 评论 -
cin输入的类型不匹配造成的死循环 cin.clear() cin.ignore()函数
当使用cin输入时,如果想要输入的类型为int的,输入时输入成了字符,就会导致cin错误#include <iostream> #include <set> using namespace std; int main() { int a; cin>>a; while(cin.fail()){ ci...原创 2019-01-13 14:49:05 · 1196 阅读 · 0 评论 -
c++中的异常
c语言中传统错误处理方式的终止程序如使用assert来终止程序缺陷: 难以接收,如果发生了内存错误程序就会终止如除0返回错误码:缺陷:需要对应错误码查找对应的错误,许多库会将错误码方到erron中,表示错误setjmp longjmpint setjmp( jmp_buf env );void longjmp( jmp_buf env, int value ); ...原创 2019-01-15 17:19:35 · 189 阅读 · 0 评论 -
c++中的智能指针
什么是智能指针c++中没有垃圾回收机制,所以很容易在疏忽的情况下造成内存泄漏的问题,为了解决这种情况,所以有了RAII,通过智能指针对于资源进行自动的释放。智能指针的原理RAII是一种利用对象的生命周期来控制资源的一种技术。在对象构造时获取资源,使之在对象的生命周期中对于资源的控制访问始终有效,在析构时将资源进行释放实际上是将一份资源交给一个对象进行托管好处:不需要显示的进行资...原创 2019-01-15 17:22:32 · 135 阅读 · 0 评论 -
c++ list 类的模拟实现
list的模拟实现list的构成list在底层是一条双向循环链表,可以在常数时间内完成插入和删除操作。最主要的缺点是无法随机存取。而在链表可以将其中元素存储在不相关的位置。list的组成list的本身和list的节点是不同的结构,list本身是由一个个的节点构成的。所以只需要完成对链表的操作即可。list的节点类与c中一样,每一个节点都有数据域前后指针,通过一个类来构造每一个节点...原创 2018-12-01 09:13:32 · 332 阅读 · 0 评论 -
读写锁---理解及测试实例
读写锁互斥锁与读写锁的区别同样都是锁,互斥锁与读写锁之间什么区别和联系?互斥锁:当使用互斥锁时,每次只能有一个线程拿到锁,进入临界区,访问临界资源。在对临界资源的访问中,可以将访问方式份为两种:(1)读取数据(2)修改数据我们对与临界资源加锁,是为了保护临界资源的安全性与正确性,防止多个线程在同一时间段中对临界资源同时修改。但是,读取数据时我们只对于数据进行读取,并不对与数据进行修改...原创 2018-12-01 00:44:39 · 1111 阅读 · 0 评论 -
C++缺省参数
C++缺省参数缺省参数的概念:缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该 默认值,否则使用指定的实参。#include <iostream>using namespace std;void fun(int a=10){ cout<<a<<endl;}int main(){ fun(...原创 2018-10-22 21:38:42 · 483 阅读 · 1 评论 -
1.this指针存在哪里?2.this指针可以为空吗?
1.this指针存在哪里?其实编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。类的静态成员函数因为没有this指针这个参数,所以类的静态成员函数也就无法调用类的非静态成员变量。2.this指针可以为空吗?可以为空,当...原创 2018-10-26 18:34:16 · 1946 阅读 · 3 评论 -
类与对象()
什么是类在c语言中的结构体可以将不同类型的数据封装在一起,在c++中,不仅可以将不同类型的数据封装在一起还可以将函数放进结构体,我们称这样的结构体为类。定义一个类声明一个类可以使用 class 和 structclass的默认访问权限为私有,struct的默认访问权限为公有 class A{ public: void fun(){ cout<<"hello"<...原创 2018-11-01 22:42:43 · 175 阅读 · 0 评论 -
c++单例模式
单例模式一个类只能创建一个对象即为单例模式,该模式中保证系统中该类只有一个实例并提供一个访问他的全局访问点,该实例被所有程序模块共享。应用场景:比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置文件【由一个单例对象统一读取,然后其他对象从该单例对象获取配置信息。单例模式的两种实现模式:饿汉和懒汉饿汉模式在程序启动时就创建一个唯一的单例对象。因为一个类中创建一个...原创 2018-11-06 16:15:10 · 125 阅读 · 0 评论 -
实现一个类只能在栈上或堆上创建对象
实现一个类只能在栈上创建对象一个对象可以创建在栈上,堆上,全局区创建对象的两种方式:假设有一个Date类Date d1; //静态创建一个对象Date *d2=new Date; //动态创建一个对象创建在栈上的对象Date d1;//正常创建Date d3(d1);//通过拷贝构造创建在堆上的Date *d2=new Date;创建在全局区和静态区std::Da...原创 2018-11-05 23:08:43 · 456 阅读 · 0 评论 -
c++动态内存管理
C++动态内存管理对比C语言和C++的动态内存管理探索静态内存管理和动态内存管理理解什么是内存泄露及内存泄露的危害operator new与operator deletenew的定位表达式深度探索new的内部机制new与delete的实现原理1.栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2.内存映射段是高效的I/O映射方...原创 2018-11-13 14:26:28 · 145 阅读 · 0 评论 -
函数模板
模板泛型编程编写与类型无关的通用代码,是代码的服用。模板是泛型编程的基础。模板函数模板类模板函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型模板。函数模板的格式template<typename T1,....typename T2,typename T3>返回值类型 函数名(参数列表){}ty...原创 2018-11-08 18:54:34 · 115 阅读 · 0 评论 -
头文件中能否进行函数的定义
通常我们使用头文件时都是在头文件中进行声明,在源文件中定义,哪我们能否在头文件中进行函数的定义我们先进行一个测试,先声明一个test.h和一个test.cpp文件,并且在test.h中定义一个函数和一个变量可以发现,程序运行没有问题,结果也正确再创建一个test.cpp文件,并且同时包含tset.h,再次运行此时程序运行出错,提示出现了重定义的错误可能有的同学会疑惑,不...原创 2018-11-15 19:56:17 · 20672 阅读 · 8 评论 -
vector 接口模拟实现
vector 接口模拟实现vector部分常用成员函数的模拟实现private: //成员数据 T* _start; //指向开头地址 T* _finish;//指向最后有效长度的后一个地址 T* _endofstorage; //指向开辟容量的后一个 构造函数无参构造Vector() //无参构造 :_...原创 2018-11-22 23:16:02 · 182 阅读 · 0 评论 -
C++ vector中的迭代器失效问题
vector中的迭代器失效问题在使用vector的成员函数时,有两个成员函数内部会出!](https://img-blog.csdnimg.cn/20181124093029161.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01fam...原创 2018-11-24 09:41:18 · 1639 阅读 · 3 评论 -
string类模拟实现
string类部分函数模拟实现对于一些常用的string类的函数进行模拟实现,通过对一些函数的模拟是实现了解,其底层的实现原理,加深对于string 类中的函数的理解构造函数 String(const char* str="")//使用缺省参数 27 :_str(new char[strlen(str)+1]) //预留一个位置放‘\...原创 2018-11-25 22:15:53 · 379 阅读 · 0 评论 -
实现一个内存池
高并内存池项目描述:实现在多核多线程的环境下,效率较高的处理高并发的内存池。项目目的:减少内存碎片提高效率,使得在特定的情况下平均运行效率该高于malloc解决在内存申请过程中的竞争问题设计思路:以定长哈希映射的空闲内存池为基础使用三层缓存分配结构三层的缓存结构在内存池实现的时候,采用了三层的结构,通过三层的不同的结构来保证达到减少内存碎片,将低锁竞争的激烈程度。...原创 2019-03-02 09:03:23 · 620 阅读 · 0 评论