C++
L_Z_
这个作者很懒,什么都没留下…
展开
-
剑指Offer15
34. 二叉树中和为某一值的路径/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr),原创 2022-04-24 15:04:07 · 1078 阅读 · 1 评论 -
剑指Offer14
12. 矩阵中的路径class Solution {public: bool exist(vector<vector<char>>& board, string word) { rows = board.size(); cols = board[0].size(); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols原创 2022-04-24 14:55:35 · 147 阅读 · 0 评论 -
剑指Offer13
21.调整数组顺序使奇数位于偶数前面class Solution {public: vector<int> exchange(vector<int>& nums) { if(nums.empty()){ return nums; } int n = nums.size(); int start = 0; int end = n - 1; wh原创 2022-04-22 11:26:57 · 330 阅读 · 0 评论 -
剑指Offer12
25. 合并两个有序链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {原创 2022-04-21 10:31:53 · 1023 阅读 · 0 评论 -
剑指Offer11
18. 删除链表节点/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* deleteNode(ListNode* head, int val) {原创 2022-04-21 10:27:57 · 238 阅读 · 0 评论 -
剑指Offer10
46. 把数字翻译成字符串给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。class Solution {public: int translateNum(int num) { if(num < 0){ return 0; } str原创 2022-04-19 15:27:49 · 130 阅读 · 0 评论 -
剑指Offer09
42. 连续子数组的最大和输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.empty()) { return 0; } int num = 0; int max =原创 2022-04-18 19:14:40 · 172 阅读 · 0 评论 -
剑指Offer08
10(1). 斐波那契数列思路:斐波那契数的边界条件是 F(0)=0和 F(1)=1。当 n>1时,每一项的和都等于前两项的和,因此有如下递推关系:F(n)=F(n-1)+F(n-2)由于斐波那契数存在递推关系,因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推关系,边界条件为 F(0)和F(1)。由于 F(n) 只和F(n−1) 与 F(n-2) 有关,因此可以使用「滚动数组思想」。class Solution {public: int fib(int n)原创 2022-04-17 13:15:18 · 145 阅读 · 0 评论 -
剑指Offer07
26. 树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。思路:判断一棵树是否是另一棵树的子结构,注意子结构与子树的区别子结构不能只利用根节点进行对称性递归,需要构造辅助函数,判断当两棵树根节点值相同时一棵树是否为另一棵树子结构/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2022-04-17 12:24:25 · 56 阅读 · 0 评论 -
剑指Offer06
32(1). 从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印思路:题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。BFS 通常借助 队列 的先入先出特性来实现。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2022-04-16 10:31:23 · 121 阅读 · 0 评论 -
剑指Offer05
04. 二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30] ]给定 target =原创 2022-04-14 17:43:01 · 127 阅读 · 0 评论 -
剑指Offer04
03. 数组中重复的数字找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入: [2, 3, 1, 0, 2, 5, 3]输出:2 或 3思路:(1)方式一:将输入的数组排序,从头到尾扫描数组(2)方式二:哈希表,从头到尾扫描数组,每扫描一个元素时,判断哈希表里面是否已包含该元素,没有就加到哈希表里面,有就表示找到(3)原创 2022-04-13 17:15:51 · 159 阅读 · 0 评论 -
剑指Offer03
05.替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”class Solution {public: string replaceSpace(string s) { string res; int size = s.size(); for(int i = 0; i < size; i++) {原创 2022-04-12 10:07:07 · 65 阅读 · 0 评论 -
剑指Offer02
06.从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]思路:先遍历的后输出,是种栈的思想,可以构造辅助栈来实现,也可以用递归来实现,每访问一个节点,先递归输出它后面的节点,在输出该节点自身/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2022-04-11 09:42:44 · 107 阅读 · 0 评论 -
剑指Offer01
09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“app原创 2022-04-10 11:40:03 · 135 阅读 · 0 评论 -
模拟实现string类
1. STL容器之string类作为STL六大组件的容器,string是我们使用频率较高的一个容器,本文将从底层出发,了解string类的实现方式2. 标准库中string类的常用接口(1)默认成员函数(2)容量(3)迭代器(4)增删查改(5)字符串操作具体的常用接口可以通过:www.cplusplus.com查看3. 模拟实现string类#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include原创 2021-04-26 23:00:06 · 193 阅读 · 0 评论 -
一个比较完善的日期类(二)
日期类class Date{public: //构造函数 Date(int year = 1900, int month = 1, int day = 1); //拷贝构造,赋值,析构不需要实现,使用默认的就可以了 //运算符重载 Date operator+(int day); // 日期加上天数 Date operator-(int day); // 日期减去天数 Date& operator+=(int day); // 日期+=天原创 2021-03-03 22:28:19 · 197 阅读 · 1 评论 -
一个比较完善的日期类Date(一)
实现一个日期类了解到类中的默认成员函数之后,我们可以自己实现一个简单的日期类,由于代码较多,在这篇博客里我只实现了日历类,日期类的实现后面会上链接分析要实现的功能1. 日期类class Date{public: //构造函数 Date(int year = 1900, int month = 1, int day = 1); //拷贝构造,赋值,析构不需要实现,使用默认的就可以了 //运算符重载 Date operator+(int day); //原创 2020-12-17 22:32:56 · 413 阅读 · 0 评论 -
C++之默认成员函数(二)
这篇博客我将介绍后三个默认成员函数(1) 赋值运算符重载:operator作用:让编译器能够支持自定义类型的一些相应运算符操作参数类型:值,引用返回值:返回*this,引用支持连续赋值检测是否自己给自己赋值:判断地址是否相同调用:一个类如果没有显式定义赋值运算符重载,编译器也会生成一个,完成对象按字节序的值拷贝注意:不能创建新的操作符参数不能全为内置类型,内置类型的操作符不能改变其含义作为类成员的重载函数时,有一个默认的形参this,限定为第一个形参.、::、sizeof、?:.原创 2020-11-08 17:30:29 · 95 阅读 · 0 评论 -
C++之默认成员函数(一)
1. 首先得知道什么是默认成员函数所谓默认成员函数就是用户没有显示实现该成员函数,编译器会替用户实现一份,没有显示定义就是没有自己实现2. 其次要知道默认成员函数有哪些任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数3. 下面我将对以上6个默认成员函数做详细解释(1)构造函数作用:创建对象,初始化成员变量构造函数调用时机:当创建对象时,由编译器自动来进行调用,并且在对象的生命周期内只调用一次特点:a. 函数名与类名相同b. 无返回值c. 可以重载注意:a.原创 2020-11-07 21:24:29 · 357 阅读 · 0 评论 -
C++-------什么是this指针?this指针详解
1. this是一个指针,里面放置的是当前对象的地址(成员函数执行时,调用该成员函数的对象)this指针是类“成员函数”第一个隐藏的参数,该指针指向调用成员函数的对象(当前对象)2. this指针的特性(1) 只能在成员函数中使用(2) this指针的类型:类类型* const(3) this指针没有存储在对象中,因此不会影响对象的大小,而是在成员函数运行时,时时刻刻指向当前对象(4) this指针是“成员函数”第一个隐藏的参数,“隐藏的”—用户在实现成员函数时,不用显式给出,该参数是编原创 2020-10-08 21:02:34 · 9999 阅读 · 3 评论 -
如何在VS2019安装OpenCV库
如何在VS2019安装OpenCV库1. 准备事项a. VS2019安装(这里不再介绍安装)b. 下载OpenCV库(下载链接:下载OpenCV库)解压好的文件如下2. 配置环境变量给电脑添加环境变量(此电脑->属性->高级系统配置->环境变量->path)这里需要注意,路径是你安装OpenCV的路径3. VS2019中的配置在VS2019中配置所需的环境需要注意在X64下面(1)右键项目属性(2)VC++目录,平台选择X64,右侧包含目录原创 2020-09-01 10:33:59 · 7708 阅读 · 4 评论 -
对类和对象(C++)的了解
正在更新中…1. 类的基本概念(1) C语言和C++的区别C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题;C++是面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。面向对象的三大特性:封装、继承、多态(2)类的定义使用struct/class对于struct来说,C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数类中的元素称为类的成员:类中的数据称为类的属性或者成员变量;类中的函数称为类原创 2020-08-31 17:50:28 · 222 阅读 · 0 评论 -
C++中 char* / string / char [] 的转换
一、string转char*。主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy();1.data()方法,如:string str = "hello sust";const char* p = str.data();//加const 或者用char * p=(char*)str.data();的形式同时有一点需要说明,这里在de...原创 2019-05-13 10:45:44 · 337 阅读 · 0 评论 -
模拟实现string类
string类的模拟实现本文只是对部分函数进行分析和代码展示,具体代码我已经上传到GitHub上面了GitHub链接:https://github.com/Sveter/CPlusPlusstring类string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别...原创 2019-01-17 18:36:46 · 632 阅读 · 0 评论 -
Singleton单例模式
单例模式一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享实现模式:饿汉模式懒汉模式饿汉模式就是说不管你将来用不用,程序启动时就创建(静态的)一个(定义一个静态对象)唯一的实例对象优缺点:优点:简单缺点:可能会导致进程启动慢,且如果有多个单例类对象实例启动顺序不确定。class S...原创 2018-12-08 18:19:06 · 544 阅读 · 0 评论 -
C++基础
命名空间命名空间定义(namespace)普通的命名空间 命名空间的嵌套 多个命名空间名称相同,编译器会自动合并//普通的命名空间namespace N1 // N1为命名空间的名称{ int a = 10; int b = 20; int Add(int left, int right) { return left + right; }}//命名空...原创 2018-10-27 23:19:53 · 138 阅读 · 0 评论 -
对new/delete的认识
new/delete的认识回顾:C语言的内存管理malloc/calloc/realloc/free函数原型//返回值:成功:空间首地址,失败:NULL//malloc void * malloc(size_t size);//size---申请空间的字节数//calloc(初始化为0)void *calloc( size_t num, size_t size );......原创 2018-11-29 15:23:46 · 189 阅读 · 0 评论