C++
qq_43313035
勇于拼搏 永远年轻
展开
-
C++面试题总结
文章目录四种newnew和 malloc的区别引用和指针的区别四种new普通的new,内存开辟失败抛出bad_alloc异常,而非返回NULL,因此检查返回值是否为NULL判断分配是否成功是徒劳的。int *p1=new int(20);不抛出异常的new,失败返回nullptrint *p2=new (nothrow) int;常量newconst int *p...原创 2019-08-26 19:00:47 · 562 阅读 · 0 评论 -
C++成员初始化
文章目录初始化列表为什么使用初始化列表必须使用初始化列表的成员C++98成员变量初始化C++11中的成员变量初始化列表初始化优点初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。为什么使用初始化列表初始化类的成员有两种方式:1.使用初始化列表2.在构造函数体内进行赋值操作。使用初始化列表主要...原创 2019-05-05 11:19:15 · 362 阅读 · 0 评论 -
LeetCode(135)—分发糖果
题目要求:N个孩子站成一排,每个人被分配了一个排名值。你需要给孩子分配糖果:每个孩子至少有一个糖果较高排名的比左边较低排名的多,比右边较低排名的多。解题思路:贪心算法从前往后遍历ratings数组,如果i+1个孩子的排名高于第i个孩子,则第i+1个孩子的糖果比第i个孩子的糖果多1.从后往前遍历ratings数组,如果i+1个孩子的排名高于第i个孩子,而且第i+1个孩子的糖果数<...原创 2019-04-19 19:56:40 · 259 阅读 · 0 评论 -
LeetCode(137)—Single Number、Single Number II
Single Number题目:Given an array of integers, every element appears twice except for one. Find that single one.解题思路:利用异或,不仅能处理两次的情况,只要出现偶数次,都可以清零#include<iostream>#include<vector>usin...原创 2019-04-19 18:46:30 · 130 阅读 · 0 评论 -
STL六大组件
文章目录容器STL六大组件容器迭代器算法仿函数适配器空间配置器容器参考原创 2019-04-29 01:23:05 · 346 阅读 · 0 评论 -
C++设计模式—迭代器模式
迭代器模式简述定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。又称作游标(Cursor)。迭代器模式是一种对象行为型模式迭代器的模式结构图外部迭代器与外部迭代器:①内部迭代器:指的是由迭代器自己来控制下一个元素的步骤,即当客户端利用迭代器读取当前元素后,迭代器的当前元素自动移到一下个元素,而客户端无法干预。②外部迭代器:则客户端控制迭代下一个元素的步骤...原创 2019-05-03 22:06:50 · 322 阅读 · 0 评论 -
C++设计模式—代理模式
文章目录代理模式简述代理模式的实现代理模式的应用场景代理模式简述定义:是结构型的设计模式之一,它可以为其他对象提供一种代理以控制对这个对象的访问在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。客户端并不能直接访问真正的主题对象,只能通过代理对象进行间接的访问,这样我们就可通过代理对象来控制对真实主题对象的访问,可以在访问前后做一些...原创 2019-05-03 18:27:14 · 157 阅读 · 0 评论 -
C++设计模式—观察者模式
定义:观察者模式(发布/订阅模式,模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式,属于行为模式中的一种,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化,关注它的对象就会得到通知;这种交互也称为发布-订阅(publish-subscribe)。目标是通知的发布者,它发出通知时并不...原创 2019-05-03 16:44:08 · 134 阅读 · 0 评论 -
C++STL的容器的底层实现详解
文章目录顺序容器vector(向量容器)deque(双端队列)list关联容器set(集合)multisetmap(key,value)multimap顺序容器vector(向量容器) 特点内存可2倍增长的动态数组数据结构:线性连续空间维护三个迭代器:start、finish、end_of_storage注意:动态增加大小,并不是在原空间之后接续新空间(因为无法保证之后尚有可供...原创 2019-04-27 21:13:22 · 14063 阅读 · 4 评论 -
C++设计模式—工厂模式
文章目录简单工厂模式工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建型模式分类:简单工厂模式 工厂方法模式抽象工厂模式简单工厂模式简单工厂模式也叫做叫做静态工厂方法(static Factory Method)模式。特点:由一个工厂对象决定创建出来哪一种产品类的实例.实质:由一个工厂类根据传入的参数,动...原创 2019-04-23 10:54:04 · 279 阅读 · 0 评论 -
多重继承
多重继承定义:一个派生类有两个或多个基类,派生类从两个或多个基类继承所需的属性。(允许一个派生类同时继承多个基类)声明多重继承的方法class D:public A,protected B,private C{ 类D新增加的成员}D是多重继生的派生类,它以公用继承的方法继承A,以保护继承方式继承B,以私有继承方法继承C。多重继承派生类的构造函数多重继承派生类的构造函数形式与单继...原创 2019-04-25 00:52:40 · 596 阅读 · 0 评论 -
RTTI机制
RTTI(Runtime Type Information)RTTI代表运行时类型信息,它提供了运行时确定对象类型的方法。typeid头文件:# include<typeinfo>返回类型:const type_info& type_infoclass type_info {public: virtual ~type_info(); ...原创 2019-04-25 10:59:56 · 360 阅读 · 0 评论 -
C++设计模式—装饰器模式
定义:动态地给一个对象添加一些额外的职责。就添加功能来说,Decorator模式相比生成子类更为灵活。属于结构型模式。本质:在面向对象的设计中,我们应该尽量使用对象组合,而不是对象继承来扩展和复用功能。装饰器模式就是基于对象组合的方式,可以很灵活的给对象添加所需要的功能。装饰器模式的本质就是动态组合。动态是手段,组合才是目的。总之,装饰模式就是通过把复杂的功能简单化,分散化,然后再运行期间,根据...原创 2019-05-07 17:50:57 · 383 阅读 · 0 评论 -
锁机制及CAS实现原理
文章目录锁机制悲观锁乐观锁锁机制存在的问题两种锁总结CAS(Compare & Set/Compare & Swap)CAS算法原理描述锁机制常用的锁机制有两种:悲观锁、乐观锁悲观锁假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。悲观锁的实现,往往依靠底层提供的锁机制。悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁假设不会发生并发...原创 2019-08-07 00:28:19 · 1691 阅读 · 0 评论 -
C++11新特性总结
文章目录类型说明符空指针nullptr基于范围的 for 循环初始化列表构造函数类型说明符auto:用于从初始化表达式中推断出变量的数据类型。auto定义的变量必须有初始值。auto a = 10;//typeid(a).name()==intauto b ;// errdecltype:用于选择并返回操作数的数据类型。编译时类型推导,以一个普通表达式为参数,返回该表达式类型,并...原创 2019-08-06 01:18:50 · 530 阅读 · 0 评论 -
数据结构—平衡二叉搜索树(AVL)
1、AVL树简介2、AVL树的单旋和双旋操作3、AVL树的插入和删除操作4、判断一棵二叉树是否是AVL树5、判断二叉搜索树是否是AVL树原创 2019-06-23 20:59:07 · 519 阅读 · 0 评论 -
数据结构—动态规划
1、动态规划与分治法区别2、最长公共子序列问题求解3、最大子段和问题求解4、最长非降子序列问题求解5、硬币选择问题求解6、0-背包动态规划求解原创 2019-06-23 11:26:19 · 1106 阅读 · 0 评论 -
数据结构—回溯法、子集树、排列树
1、子集树和排列树2、轮船装载3、0-1背包4、八皇后5、整数求和6、全排列原创 2019-06-22 17:53:34 · 5577 阅读 · 0 评论 -
数据结构—红黑树
1、红黑树概念2、红黑树数据结构3、红黑树的插入及删除操作原创 2019-06-22 10:08:51 · 214 阅读 · 1 评论 -
函数重载简单介绍
文章目录什么是函数重载C++为什么支持函数重载,C语言不支持函数重载需要注意的C++和C语言代码之间如何互相调用C调用C++C++调用C代码拓展知识什么是函数重载一组函数,其中函数名相同,参数列表的个数或者类型不同,那么这一组函数就称作函数重载。#include<iostream>using namespace std;bool compare(int a, int b)...原创 2019-06-07 13:20:53 · 377 阅读 · 0 评论 -
const用法详解
1、const修饰的变量和普通变量的区别2、const和一级指针的结合3、const和二级指针的结合4、有关const和一二级指针结合面试常见例题原创 2019-06-12 20:54:27 · 311 阅读 · 0 评论 -
C++设计模式—命令模式
定义原创 2019-05-11 23:52:43 · 134 阅读 · 0 评论 -
C++四种强制类型转换
static_cast 用法:static_cast<类型说明符> (变量或表达式) 作用用于基本类型数据的转换double d = 3.1222;int a = static_cast<int> (d);将任何类型转换为void类型把任何类型的表达式转换为void类型用于类层次结构中基类和派生类之间指针或引用的转换它允许子...原创 2019-04-27 01:23:58 · 2960 阅读 · 0 评论 -
大数的加减乘除
#include <iostream>#include <algorithm> #include <string>#include <vector>using namespace std;// 大整数类型class BigInt{public: BigInt(string str) :strDigit(str) {}privat...原创 2019-04-16 22:31:31 · 133 阅读 · 0 评论 -
继承与派生、虚函数、多态
文章目录继承单继承多重继承派生派生类的声明方式派生类的构成派生类成员的访问属性公用继承私有继承保护继承普通派生类的构造函数创建普通对象的构造函数有子对象的派生类的构造函数创建子对象派生类构造函数普通派生类的析构函数有子对象的派生类的析构函数虚函数虚函数的作用虚函数的使用方法虚函数表在什么情况下应当声明为虚函数非虚函数静态关联动态关联多态性纯虚函数抽象类重载:函数名相同,参数列表不同、处在同一个作...原创 2019-04-21 00:58:19 · 983 阅读 · 0 评论 -
vector的简单实现
vector的容器适配器目的对象的构造和内存的开辟分开对象的析构和内存的释放分开template<typename T>class Allocator{public: T* allocate(size_t size) // 开辟内存 { return (T*)malloc(size); } void deallocate(void *ptr) // 释放内...原创 2019-03-24 21:49:26 · 316 阅读 · 0 评论 -
C++循环队列的实现
class CircleQueue{public: CircleQueue(int size = 10) { mSize = size; mFront = mRear = 0; mpQue = new int[mSize]; } CircleQueue(const CircleQueue &amp;src) {&nbsp;&nbsp;mSize = src.mSize;...原创 2019-03-24 21:34:18 · 395 阅读 · 0 评论 -
用OOP实现迷宫路径的查找
问题要求:请输入迷宫的行列数: 5 5请输入迷宫路径节点信息(1表示不能走,0表示能走)0 0 1 0 10 0 1 0 01 0 0 1 00 1 0 0 0开始寻找迷宫路径(从左上角到右下角的一个可通行的路径):迷宫不存在可通行的路径1 0 10 * 1 0 01 * * 1 00 1 * * *代码实现如下:const int WAY_CNT = 4;...原创 2019-03-24 21:33:32 · 131 阅读 · 0 评论 -
C++常量成员函数
一、常量成员函数的定义常成员函数是指由const修饰符修饰的成员函数,在常成员函数中不得修改类中的任何数据成员的值。二、使用规则1、const成员函数应该在函数原型说明和函数定义中都增加const限定2、非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员3、但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数...原创 2019-03-24 21:32:01 · 336 阅读 · 0 评论 -
构造函数、拷贝构造函数,析构函数赋值函数何时使用
一、class Test{public: Test(int a=5):ma(a){cout&amp;lt;&amp;lt;&quot;Test(int)&quot;&amp;lt;&amp;lt;this&amp;lt;&amp;lt;endl;} ~Test(){cout&amp;lt;&amp;lt;&am原创 2019-03-24 21:31:00 · 246 阅读 · 0 评论 -
函数模板、模板函数,完全特例化、部分特例化
一、函数模板1、定义建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。2、举例template<typename T> //T就是一个虚拟的类型,typename关键字也可以用class 关键字替换bool comp...原创 2019-03-24 21:30:01 · 1292 阅读 · 0 评论 -
表容器和迭代器
文章目录定义迭代器操作定义表容器是按位置保存元素的数据结构。与向量不同的是,它不提供直接按位置访问元素的外部索引机制。迭代器尽管表是通过位置存储元素的顺序容器,表结构却没有提供可以直接访问指定元素设为下标。为了访问元素,表对象使用迭代器。尽管所有的容器都有迭代器,但表迭代器最容易理解。表迭代器是一个对象,它按表中元素的位置次序访问元素。迭代器是一种一般的指针,在接口中使用指针符号。...原创 2019-03-24 19:40:54 · 296 阅读 · 0 评论 -
类的静态成员函数和静态数据成员
一、静态数据成员1、定义:静态数据成员就是给类的普通数据成员加上关键字static。2、访问规则静态数据成员也遵守public/protected/private访问规则访问静态成员时,则可以通过类名::成员名的方式访问,不需要指明被访问的成员属于哪个对象或作用于哪个对象。因此,甚至可以在还没有任何对象生成时就访问一个类的静态成员。非静态成员的访问方式(也即对象名.成员名)其实也适用...原创 2019-03-10 22:38:21 · 1295 阅读 · 0 评论 -
C++类的常数据成员和常成员函数
一、常数据成员1、定义用const修饰的数据成员const int hour;//定义const为常数据成员2、初始化不能采用在构造函数中对常数据成员进行赋初值的方法,因为常数据成员是不能被赋值的。构造函数只能用参数初始化列表对常数据成员进行初始化Time ::Time (int h):hour(h){}//通过参数初始化表对常数据成员进行初始化3、访问规则普通成员函数...原创 2019-03-11 11:01:07 · 3941 阅读 · 0 评论 -
函数对象、泛型算法
文章目录函数对象(伪函数)函数对象的应用C++ STL的函数对象 (greater less greater_equal)使用实例库里面全是二元函数对象,二元函数对象+绑定器可以得到一元函数对象Lamba表达式(函数对象)就是()的重载,比绑定器好用自己实现sort 泛型算法函数对象(伪函数)有运算符重载的对象xx元函数对象:看operator()函数有几个形参。函数对象的应用只应...原创 2019-03-24 22:09:49 · 314 阅读 · 0 评论 -
优先级队列
找出前10小元素int main(){ vector<int> vec; for(int i=0;i<200;++i) { vec.push_back (i); } priority_queue<int,vector<int>,less<int>> que1;//大根堆 for(int i...原创 2019-03-26 00:15:58 · 660 阅读 · 0 评论 -
哈希表
文章目录链地址法实现的哈希表结构(一)list成员splice函数的用法链地址法实现的哈希表结构(二)线性探测法实现的哈希结构链地址法实现的哈希表结构(一)该链表中存放的是键值对#include<iostream>#include<vector>#include<list>using namespace std;template<type...原创 2019-03-23 18:29:24 · 234 阅读 · 0 评论 -
C++设计模式—单例模式
文章目录设计模式定义目的种类单例模式饿汉模式懒汉模式线程安全的单例模式设计模式定义设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。目的使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码的可靠性。种类单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式等等单例模式皇帝有且只有一个,两个会出现问题。有些对象只需要一个,比如:配置文件、工具...原创 2019-04-09 21:08:19 · 295 阅读 · 0 评论 -
不带引用计数的智能指针
文章目录auto_ptrC++库中提供的不带引用计数的智能指针主要包括:auto_ptr,scoped_ptr,unique_ptrauto_ptrauto_ptr是C++98标准化引入的源码template<class _Ty> class auto_ptr { // wrap an object pointer to ensure destructionpubli...原创 2019-04-02 17:22:34 · 263 阅读 · 0 评论 -
带引用计数的智能指针shared_ptr、weak_ptr
智能指针的引入由于C++语言没有自动内存回收机制,每次new出来的内存都要手动delete。忘记delete二次释放异常导致程序过早退出,没有执行delete用智能指针便可以有效缓解这类问题理解智能指针1.从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取即初始化)的技术对普通的指针进行封装。因此智能指针实质是一个对象,行为表现的却像一个指针。2.每次创建类的新对象时,...原创 2019-04-07 20:13:30 · 567 阅读 · 0 评论