
C++学习
CXYhh121
这个作者很懒,什么都没留下…
展开
-
【LintCode】—— 动态规划经典题之0-1背包问题(全)
Backpack题目描述在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]样例 1:输入: [3,4,8,5], backpack size=10 输出: 9样例 2:输入: [2,3,5,7], backpack size=12 输出: 12解题思路这里使用动态规划的思想,动态规划四部曲状态:F(i,j) 将第...原创 2019-08-25 18:57:38 · 760 阅读 · 0 评论 -
【C++】—— 异常
一、C语言传统处理错误的方式传统错误的处理机制终止程序,如assert,缺陷:用户难以接受,如果发生内存错误,除0就会终止程序。返回错误码,缺陷:需要程序员对应错误码去寻找对应的错误。如系统很多库的接口函数就是通过错误码放到errno中,表示错误。C标准库中的setjmp和longjmp组合。二、C++异常的概念异常是一种处理错误的方式,当一个函数发现自己无法处理的错误时就可以抛出...原创 2019-03-31 17:22:20 · 235 阅读 · 0 评论 -
【C++】—— 多态(上)
一、多态的概念1.1 概念通俗的来说,多态就是多种形态,具体一点就是,去完成某个行为时,不同的对象去完成会有不同的状态。我们来举个栗子,比如说我们平时买票这个行为,普通人买票就是全价票,学生就是半价票,军人可以优先买票,这就相同的一个行为,不同的人去完成有不同的效果。二、多态的定义和实现2.1 多态的构成条件1.调用函数的对象必须是指针或者引用2.被调用的函数必须是虚函数,且完...原创 2019-03-24 11:43:12 · 238 阅读 · 0 评论 -
【C++】—— 继承与多态常见面试题
一、实现一个不能被继承的类实现一个不能被继承的类有两种方法,下面我们一一来解释:1、在C++98中我们可以将基类构造函数私有化,派生类调不到基类的构造函数,则无法继承。#include <iostream>using namespace std;class Person{public: static Person GetPerson() { return P...原创 2019-03-26 19:19:25 · 1168 阅读 · 0 评论 -
【C++】—— 菱形继承和菱形虚拟继承
C++中的几类继承方式举个栗子看看菱形继承class Person{public: string _name; // 姓名};class Student : public Person{protected: int _num; //学号};class Teacher : public Person{protected: int _id; // 职工编号};cla...原创 2019-03-23 20:31:14 · 371 阅读 · 0 评论 -
【C++】—— C++中的继承(下)
上篇博客C++中的继承(上)我们讲到了继承关系函数重载与函数重定义等概念,接下来我们继续介绍继承与派生:继承与派生派生类中的默认成员函数派生类的构造函数必须调基类的构造函数初始化基类那一部分的成员。若基类没有默认的构造函数,则必须在派生类构造函数的初始化列表阶段显示调用。 派生类的拷贝构造函数必须调基类的拷贝构造函数完成基类部分成员的拷贝构造。 派生类的operat...原创 2019-03-23 17:34:16 · 170 阅读 · 0 评论 -
【C++】—— 智能指针
一、为什么需要智能指针我们先来看一段代码#include <iostream>#include <vector>#include <exception>using namespace std;void Test(){ int* tmp = (int*)malloc(sizeof(int)* 100); int* p = new int; ...原创 2019-04-03 22:47:49 · 382 阅读 · 0 评论 -
【C++】—— C++中的继承(上)
继承与派生继承关系和访问限定符三种访问限定符:public protected private三种继承关系:public protected private继承基类成员访问关系的变化总结基类(父类)private成员在派生类中无论以什么方式继承在派生类(子类)都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是...原创 2019-03-22 18:44:21 · 248 阅读 · 0 评论 -
【数据结构】—— 浅析红黑树及模拟实现
红黑树红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单...原创 2020-03-10 10:25:39 · 567 阅读 · 0 评论 -
【C++】—— STL关联式容器map/set
一、关联式容器首先我们先介绍一下什么是关联式容器序列式容器vector、list、deque、forward_list(C++11)因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,map其里面存储的是<key, value>结构的键值对,set里面存储的是value,在数据检索时比序列式容器效率更高。由于set和之前...原创 2019-04-17 23:12:20 · 494 阅读 · 0 评论 -
【C++】—— 如何跟面试官讲述什么是右值引用
右值引用1.什么是左值和右值C/C++语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址,就可以对内存进行读并且写(主要是能写)操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算...原创 2019-06-25 23:02:14 · 1326 阅读 · 0 评论 -
【C++】—— 大数据处理
前面我们讲过哈希的两个应用哈希应用之位图哈希应用之布隆过滤器今天我们就用这两个应用来解决一些有关大数据处理的问题大数据处理位图的应用1、给定100亿个整数,设计算法找到只出现一次的整数?思路分析:- 1)100亿个数,无符号整型最多才42亿多,因此我们首先要明白,这里有很多重复的数,所以我们在进行空间的建立时,只用分析42亿多的就可以了,那么就是16G,这道题没有规定要使用多...原创 2019-06-02 14:33:26 · 1799 阅读 · 0 评论 -
【C++】—— 封装底层为哈希表的unordered_map/set
之前介绍了哈希表和解决哈希冲突的两种方式闭散列解决哈希冲突:https://blog.youkuaiyun.com/chenxiyuehh/article/details/90043229开散列解决哈希冲突:https://blog.youkuaiyun.com/chenxiyuehh/article/details/90109713今天介绍如何封装底层为哈希表的unordered_map/set,这里是以...原创 2019-05-13 17:16:28 · 3012 阅读 · 0 评论 -
【C++】模拟实现STL string类
头文件String.h#pragma once#include <iostream>#include <string.h>#include <string>#include <assert.h>using namespace std;namespace CXY{ class String { public: typedef...原创 2019-01-23 18:22:11 · 298 阅读 · 0 评论 -
【C++】—— unordered_map/set
unordered_maphttp://www.cplusplus.com/reference/unordered_map/unordered_map/?kw=unordered_map一、unordered_map的概念unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map...原创 2019-05-01 12:59:10 · 2255 阅读 · 2 评论 -
【数据结构】—— 哈希表之开散列解决哈希冲突(哈希桶)
哈希的概念 : https://blog.youkuaiyun.com/chenxiyuehh/article/details/90043229开散列1. 开散列概念开散列法又叫链地址法(开链法)/哈希桶/拉链法,首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。2.开散列的实现存...原创 2019-05-11 14:58:35 · 898 阅读 · 2 评论 -
【数据结构】—— 哈希表之闭散列解决哈希冲突
一、底层结构unordered_set/map介绍https://blog.youkuaiyun.com/chenxiyuehh/article/details/89737056unordered_set/map应用https://blog.youkuaiyun.com/chenxiyuehh/article/details/89964419unordered系列的关联式容器之所以效率比较高,是因为其底层使用了...原创 2019-05-09 17:16:48 · 1270 阅读 · 3 评论 -
【C++】—— 实现底层为红黑树的Map和Set
STL关联式容器map/set介绍:https://blog.youkuaiyun.com/chenxiyuehh/article/details/89361160红黑树的模拟实现https://blog.youkuaiyun.com/chenxiyuehh/article/details/89437298这两篇博客介绍了map/set的相关接口使用和红黑树的模拟实现,现在我们来用一个红黑树封装实现MyMap和M...原创 2019-04-27 18:41:50 · 2999 阅读 · 1 评论 -
C/C++的数据类型范围
转载博客 https://www.cnblogs.com/bingcaihuang/archive/2011/07/14/2105959.html速查表:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 6553...原创 2019-03-25 20:02:04 · 6836 阅读 · 1 评论 -
【C++】—— 多态(下)之多态的实现原理
一、多态的实现原理1.1 虚函数表这里我们先来看一道经常会遇到的面试和笔试题class Base{public: virtual void Func1() { cout << "Func1()" << endl; }private: int _b = 1;};int main(){ printf("%d\n", sizeof(Base));...原创 2019-03-25 18:44:20 · 277 阅读 · 0 评论 -
【C++】—— 类与对象(中)
一、类的6个默认成员函数二、构造函数2.1 构造函数的定义构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.2 构造函数的特性(1) 函数名与类名相同。(2) 无返回值。(3) 对象实例化时编译器自动调用对应的构造函数。(4) 构造函数可以重载。#include &...原创 2019-01-17 18:10:36 · 189 阅读 · 0 评论 -
【C++】—— 类与对象(上)
一、类的定义1.1 类的定义class ClassName{ //类体:包含成员函数和成员变量};class为定义类的关键字,ClassName为类的名字,类中的元素称为类的成员:类中的数据称为类的属性或是成员变量类中的函数称为类的方法或是成员函数二、类的声明与定义类的声明和定义可以放在一起,也可分开,将声明放在类的头文件.h,将定义放在类的实现文件.cpp中。三、 类的访问...原创 2019-01-16 18:22:06 · 217 阅读 · 0 评论 -
C++基础知识点整理
一、C++的关键字二、命名空间namespace1、命名空间的作用就是为了对标识符进行隔离,避免相同的名字产生冲突namespace N1//N1是命名空间的名称{ //命名空间的内容既可定义变量也可定义函数 int a = 2; int ADD(int x, int y) { return x + y; }}namespace N2{ int a = 3; i...原创 2019-01-15 18:01:40 · 483 阅读 · 0 评论 -
【C语言】—— 内联函数inline
一、内联函数的概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。这里我们先看一段代码:int ADD(int x, int y){ return x + y;}int main(){ int a = 3; int b = 4; int a = ADD(a, b); return 0;}...原创 2019-02-20 18:22:07 · 2691 阅读 · 0 评论 -
浅谈四种格式控制符
一、setw1.1 使用格式/*undefined*/ setw (int n);1.2 功能说明设置字段宽度,设置要在输出操作上使用的字段宽度。表现为成员宽度在作为操纵器插入/提取它的流上用n作为参数调用(它可以在输入流或输出流上插入/提取)。这个操纵器在头文件中声明 。1.3 参数说明n:即为所设置的字段宽度的字符数1.4 使用说明#include <iostre...原创 2019-02-28 19:46:49 · 2068 阅读 · 0 评论 -
C/C++内存管理
一、C++的内存分布1.1 C++的内存分布int globalVar = 1;//全局变量static int staticGlobalVar = 1;//静态全局变量void Test(){ static int staticVar = 1;//静态局部变量 int localVar = 1;//局部变量 int num1[10] = {1, 2, 3, 4}; char ...原创 2019-01-20 18:28:05 · 243 阅读 · 2 评论 -
【C++】—— string类各接口的介绍和使用测试
一、string类对象的常见构造1.1 常见构造函数说明函数名称功能说明string()构造空的string类对象,即空字符串string(const char* s)用C-string来构造string类对象string(size_t n, char c)string类对象中包含n个字符cstring(const string&amp;s)拷贝构...原创 2019-01-22 16:00:36 · 451 阅读 · 0 评论 -
C++实现日期类(Date)
头文件Date.h#include &amp;lt;iostream&amp;gt;using namespace std;class Date{public: int GetMonthDay(int year, int month); Date(int year = 2019, int month = 1, int day = 15); Date(const Date&amp;amp; d);//拷贝构...原创 2019-01-17 18:29:05 · 3049 阅读 · 0 评论 -
【C++】—— 类与对象(下)
一、构造函数1.1 初始化列表1、初始化列表的定义:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。(初始化列表其实可以理解为成员变量定义的地方)2、初始化列表的使用:class Date{public: Date(int year, int month, int day) : _year(year) , _month...原创 2019-01-18 15:30:21 · 346 阅读 · 0 评论 -
【C++】—— C/C++内存管理常见面试题
一、new和delete与malloc和free的区别1、new和delete是操作符,malloc和free是函数。2、使用new申请空间时,会对所申请的空间进行初始化,malloc则不会。3、malloc在申请空间时,需手动计算所申请空间的大小,new只需在后面加上所开空间的类型即可,不用计算大小。 以链表创建一个节点为例: eg:ListNode* newnode = (...原创 2019-02-20 20:32:16 · 545 阅读 · 0 评论 -
【C++】—— 优先级队列(priority_queue)
一、优先级队列1、 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2、 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3、 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4、...原创 2019-03-18 17:04:06 · 1123 阅读 · 0 评论 -
【LeetCode】—— 在LeetCode下怎样确定bug的位置
这里先来看看我最近写的一个题设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点...原创 2019-03-17 19:04:17 · 426 阅读 · 0 评论 -
【C++】—— 模拟实现List
头文件List.h#include <iostream>#include <algorithm>//算法头文件using namespace std;namespace CXY{ template<class T> struct _ListNode //封装一个节点 { _ListNode<T>* _prev; _ListN...原创 2019-03-17 17:30:46 · 288 阅读 · 0 评论 -
【C++】—— 模拟实现vector(源代码)
一、vector的介绍1、vector是表示可变大小数组的序列容器。2、就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3、本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做...原创 2019-03-07 17:40:29 · 4282 阅读 · 2 评论 -
【C++】—— 容器适配器
一、 什么是容器适配器1、什么是适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该中模式是将一个类的接口转换成客户希望的另外一个接口。我们要明白适配器是干什么的?其实就是一个接口转换装置,是得我们能用特定的方法去操作一些我们本来无法操作的东西。举一个例子,比如你的一个设备支持串口线,而你的电脑支持的是usb口,这时候,我们没有必...原创 2019-03-19 15:40:02 · 330 阅读 · 0 评论 -
【LeetCode】—— C++实现二叉树的遍历(非递归)
一、二叉树的前序遍历LeetCode144题题目描述及解析可参考博客https://blog.youkuaiyun.com/chenxiyuehh/article/details/86931798基本思路均相同,只是实现语言不同,C++比C语言实现要简单的多,毕竟可以直接使用vector和stack,不用像C语言一样还得自己实现一个栈,也可以将遍历序列直接存入vector中,而不用像C语言一样要遍历两遍二...原创 2019-03-10 15:25:55 · 453 阅读 · 0 评论 -
【LeetCode】—— vector相关OJ题(上)
一、只出现一次的数LeetCode136题1.1 题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 41.2 解题思路该题实现很简单,只用让相邻的两个数...原创 2019-03-04 19:37:06 · 304 阅读 · 0 评论 -
【LeetCode】—— vector相关OJ题(下)
一、电话号码的字母组合1.1 题目描述给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf&q原创 2019-03-08 18:31:48 · 335 阅读 · 0 评论 -
浅谈一些与文件相关的函数
一、fopen函数1.1 使用格式FILE * fopen(const char * filename,const char * mode);1.2 函数的功能打开文件(open file)打开名称在参数filename中指定的文件,并将其与可在将来操作中通过返回的FILE指针识别的流相关联。流上允许的操作及其执行方式由mode参数定义。如果已知未引用交互式设备(请参阅setbuf)...原创 2019-02-22 20:45:32 · 366 阅读 · 0 评论