C++
文章平均质量分 56
cherrydreamsover
这个作者很懒,什么都没留下…
展开
-
C++三大特性--多态
多态的概念 多态的分类 C++中多态的实现原理一、多态的概念在说多态之前,我们来先看一看对象的类型 来看一个例子: 多态:意思既是同一个事物的多种形态,用我们C++的专业词语来说就是:一个借口、多种实现方式。二、多态分类静态多态: 静态多态:编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函...原创 2018-08-28 17:24:09 · 3063 阅读 · 0 评论 -
C/C++程序内存的分配
一、一个C/C++编译的程序占用内存分为以下几个部分:栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。全局区(静态区static):存放全局变量、静态数据、常量。程序结束后游戏厅释放。全局区分为已初...原创 2018-08-13 12:43:57 · 45749 阅读 · 10 评论 -
LeetCode--LeetCode:Remove Nth Node From End of List(C++)
题目描述:Given a linked list, remove the nth node from the end of list and return its head.For example,Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the...原创 2018-08-08 09:22:16 · 196 阅读 · 0 评论 -
LeetCode--add-two-numbers(反序链表求和)C++
题目描述:You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a...原创 2018-08-07 20:54:57 · 233 阅读 · 0 评论 -
LeetCode--convert-sorted-list-to-binary-search-tree(C++)
题目描述:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.思路分析:由于给出的单链表是已经排序好的,本题我们只需要找到中间节点,将其标记为树的根,然后分别递归调用左子树和右子树。代码实现如下:/** * Def...原创 2018-08-07 10:55:39 · 185 阅读 · 0 评论 -
LeetCode--Binary Tree Preorder Traversal(C++)
题目描述: Given a binary tree, return the preorder traversal of its nodes’ values. For example:Given binary tree {1,#,2,3},1 \ 2 / 3 return [1,2,3].思路分析: 本题是一个二叉树遍历的常规题目。用非递归...原创 2018-08-14 21:58:32 · 435 阅读 · 0 评论 -
C语言模拟实现strlen、strcpy、strcat、strstr、strcmp、memcpy、memmove
一、strlen函数1.函数介绍strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。 之前我在博客中写过关于数组运算中strlen和sizeof的区别,这里就不再多说了,附上连接:https://blog.csdn.net/...原创 2018-08-14 20:34:18 · 510 阅读 · 0 评论 -
LeetCode--partition-list(C++)
题目描述:Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.You should preserve the original relative order of the nodes in ea...原创 2018-08-07 10:17:10 · 472 阅读 · 1 评论 -
平衡二叉树:输入一颗二叉树,判断该二叉树是否是平衡二叉树?(C++)
题目描述:输入一颗二叉树,判断该二叉树是否是平衡二叉树?思路分析:平衡二叉树是指它的左右子树深度相差小于等于1。因此我们需要先求出该二叉树树左右子树的深度,然后看他们的差是否小于等于1代码实现:class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NUL...原创 2018-08-11 11:02:41 · 865 阅读 · 0 评论 -
剑指offer-二叉搜索树的后序遍历序列(C++)
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路分析:我们首先要知道二叉搜索树的性质(即就是:二叉树搜索树它的左子树都比根节点小,右子树都比根节点大,并且二叉搜索树的中序遍历是有序的)。根据这个思路我们再结合递归,来进行二叉搜索树的后序遍历。还有就是后序遍历的顺序是左子树–>右子...原创 2018-08-11 10:29:22 · 835 阅读 · 0 评论 -
剑指offer--二叉树的镜像、二叉树的深度
最近,我会将自己写的看到的并且弄懂的题写进我的博客中,下面我们就一起来看看吧!一、二叉树的镜像题目描述:题目:给定二叉树,将其变换为源二叉树的镜像。题目:给定二叉树,将其变换为源二叉树的镜像。二叉树的定义如下:struct TreeNode{int val;TreeNode* left;TreeNode* right;};输入描述:二叉树的镜像...原创 2018-08-09 19:37:36 · 294 阅读 · 1 评论 -
printf函数你不知道的那点事!
在平时的编程中,我们经常使用printf函数进行输出,可以说printf函数真的和我们很熟悉了,但是printf函数也有很多神奇的地方,不知道你知道吗? 下面我们一起来看看吧!一、函数基本介绍printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int printf (...原创 2018-08-05 11:28:03 · 1702 阅读 · 1 评论 -
末尾0的个数--C++
题目描述:输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2输入描述: 输入为一行,n(1 ≤ n ≤ 1000)输出描述: 输出一个整数,即题目所求输入例子1: 10输出例子1: 2思路分析:最开始看到这个题目的时候我想到了求阶乘,然后再算0的个数,可以说是特别特别笨的想法,或者说都不算是一种解题思路,是根...原创 2018-07-27 17:35:25 · 3802 阅读 · 2 评论 -
剑指offer--二叉搜索树与双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:按照本题的意思,我们能想到的就是根据二叉树的中序遍历,因为中序遍历是:左子树–>跟–>右子树,由于二叉搜索树它的根节点大于左子树,小于右子树的,所以,只要我们将跟的左指向它左子树中最大的一个子树,让它跟的右指向右子树中最小的元素,就做到了将二叉搜索...原创 2018-08-04 19:31:32 · 235 阅读 · 0 评论 -
浅谈:C/C++中的关键字--static
关键字static在C/C++中应用广泛,其主要有三个作用: (1)修饰变量 (2)修饰函数 (3)修饰数据成员/成员函数 其中前两个是面向过程语言中static的应用,即C语言,后一种是面向对象语言中static的应用,即C++。下面我们一起来学习学习吧!一、修饰变量变量可以分为局部变量和全局变量,但是无论是什么变量,只要被static修饰,它们都存在与全局区(静态区)。...原创 2018-08-13 17:27:59 · 274 阅读 · 0 评论 -
剑指offer--把二叉树打印成多行(C++)
题目描述:从上到下按层打印二叉树,同一层节点从左往右输出,每一层输出一行。问题分析:这个问题就是二叉树的层序遍历,之前我的博客中曾写到过“锯齿型层序打印二叉树”,和本体思路基本一样,并且本题相对那个题较简单一些,我将那篇博客的连接放在这里:https://blog.csdn.net/cherrydreamsover/article/details/81051663代码实现:/*s...原创 2018-08-08 20:34:39 · 519 阅读 · 1 评论 -
C++设计一个类:只能在堆上创建对象、只能在栈上创建对象、只能创建一个对象
在C++中,创建类的对象有两种方法,一种是静态建立,A a; 另一种是动态建立,调用new 操作符。一、只能在堆上创建对象就是动态建立类的对象,使用new操作符来完成。 做法一:将该类的构造函数和析构函数权限设为protected,(可以让该类可以被继承),然后定义两个static 函数来调用new ,delete 来创建和销毁对象。class A{protected: ...原创 2018-08-23 13:25:44 · 3582 阅读 · 0 评论 -
剑指offer--找出字符串中第一个只出现一次的字符(题面已经更新)C++
题目描述:找出字符串中第一个只出现一次的字符输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1 输入asdfasdfo 输出ö代码实现如下:#include<iostream>#include<string>#include<map>using namespace std;i...原创 2018-08-23 08:17:39 · 2039 阅读 · 0 评论 -
C++类的六个默认成员函数
先来定义一个类class A{};经过编译器处理之后,类A不在为空,它会自动的生成六个默认的成员函数,即使这六个成员函数什么也不做。(这些成员函数当我们没有定义时,编译器会显示的调用)处理之后相当于:class A{public: A();//构造函数 A(const A& a);//拷贝构造函数 ~A();//析构函数 A&...原创 2018-08-22 19:30:11 · 6478 阅读 · 1 评论 -
LeetCode--Recover Binary Search Tree(C++)
题目描述: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure.Note: A solution using O(n) space is pretty straight forward. Could you d...原创 2018-08-19 20:55:09 · 287 阅读 · 0 评论 -
LeetCode--Validate Binary Search Tree(验证二叉搜索树)C++
题目描述:Given a binary tree, determine if it is a valid binary search tree (BST).Assume a BST is defined as follows:The left subtree of a node contains only nodes with keys less than the node’s key. ...原创 2018-08-19 19:36:23 · 446 阅读 · 0 评论 -
C++中的命名空间&&输入输出
一、命名空间1.引入在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突, 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,Namespace关键字的出现就是针对这种问题的。2.定义(1)命名空间的定义namespace Namespace{// 内容}(2)相同的命名空间可以分割在...原创 2018-08-19 17:30:55 · 485 阅读 · 0 评论 -
C++中指针和引用的区别&&传值、传址、传引用的区别,哪一种高效?
一、概念指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元。引用:引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。举个例子:int a=10;//指针,定义了一个整型变量a和指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。int* p=&a;//引用,一个整形变量a和这个整形a的引用b,事实上a和b...原创 2018-08-19 16:23:46 · 2094 阅读 · 0 评论 -
C++三大特性--封装
封装的概念:class+访问限定符 类的作用域:与函数重载结合 类的实例化:类–&gt;实例化–&gt;对象 对象模型:三个问题 this指针:特性 编译器如何来识别一个类 我们都知道C++有三大特性:封装、继承、多态,之前我总结过继承的知识点,现在来总结一下封装的相关知识!一、什么是封装?封装:隐藏对象的属性和实现细节,仅对外公开接口和对象进行交互,将数据和操作数据的方法进...原创 2018-08-22 13:13:57 · 17974 阅读 · 0 评论 -
LeetCode--Minimum Depth of Binary Tree(C++)
题目描述: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.题目分析:本题我们还是用递归,分为四种情况: (1)左右子树...原创 2018-08-16 21:19:19 · 248 阅读 · 0 评论 -
C语言和C++的区别与联系(详细)
面向过程和面向对象语言的区别 文件区别:关键字、后缀、返回值、参数列表 重载 C/C++函数调用约定与函数名称修饰规则在学习了C语言和C++之后,这两者之间的区别我们需要仔细的捋一捋!一、面向过程语言和面向对象语言我们都知道C语言是面向过程语言,而C++是面向对象语言,说C和C++的区别,也就是在比较面向过程和面向对象的区别。1.面向过程和面向对象的区别(1)面向...原创 2018-08-19 10:47:32 · 122787 阅读 · 18 评论 -
LeetCode-- Binary Tree Postorder Traversal(C++)
Given a binary tree, return the Postorder traversal of its nodes’ values. For example:Given binary tree {1,#,2,3},1 \ 2 / 3 return [3,2,1].本题和我之前做过的一个类似的题:Binary Tree Preorder Traver...原创 2018-08-16 17:54:04 · 314 阅读 · 1 评论 -
数组和指针的区别与联系(详细)
指针和数组的区别: 1.概念: 2.存储方式、初始化(指针数组、数组指针)、存储内容(求sizeof) 3.赋值 6.传参(函数指针、函数指针数组、函数指针数组的指针、野指针)一、概念数组:数组是用于储存多个相同类型数据的集合。指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。二、赋值、存储方式、求sizeof、初始化等1.赋...原创 2018-08-16 14:45:43 · 133827 阅读 · 27 评论 -
LeetCode--same tree(C++)
题目描述:Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.翻译:给定两个二叉...原创 2018-08-18 11:10:49 · 297 阅读 · 0 评论 -
LeetCode--construct binary tree from inorder and postorder-traversal(根据中序和后序遍历重建二叉树)C++
题目描述:Given inorder and postorder traversal of a tree, construct the binary tree.Note: You may assume that duplicates do not exist in the tree.思路分析:本题要求我们通过二叉树的中序和后序遍历还原这个二叉树,我们知道二叉树的中序遍历的顺序是:左子树–...原创 2018-08-18 11:00:19 · 440 阅读 · 0 评论 -
用C/C++测试编译器中关键字占多少个字节?
用C语言测试自己编译器所占字节的大小,代码实现如下:#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;climits&amp;gt;#include&amp;lt;float.h&amp;gt;int main(){ int* p; printf(&quot;char = %d\n&quot;, size原创 2018-08-04 13:57:18 · 791 阅读 · 0 评论 -
进制转换--给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数C++
题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述: 输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述: 为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)示例1 输入 7 2输出 111代码实现:#include&l...原创 2018-07-27 16:04:09 · 5036 阅读 · 0 评论 -
浅谈:智能指针C++
本篇博客,我将对为什么引入智能指针?智能指针的设计原理以及作用是什么?常用的智能指针有哪些?它是如何实现的来进行浅谈!一、智能指针的引入我们先来看一个例子(如下图): 于是,师徒二人展开激烈的讨论: 此时我们就知道了为什么会有智能指针的存在。二、智能指针的实现原理1.概念: 智能指针是一个类,它使用了RAII技术,在该类的构造函数中传入一个普通指针,析构函数中...原创 2018-07-30 19:50:11 · 517 阅读 · 0 评论 -
剑指offer--连续子数组的和最大C++
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向...原创 2018-07-16 21:07:03 · 404 阅读 · 0 评论 -
到Fibonacci数最小步数--C++
题目描述: Fibonacci数列是这样定义的: F[0] = 0 F[1] = 1 for each i ≥ 2: F[i] = F[i-1] + F[i-2] 因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前...原创 2018-07-16 20:31:27 · 399 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目描述:数组中有一个数字的次数超过数组长度的一半,请找出这个数字。例如在一个长度为9的数组{1,2,3,2,2,2,5,4,2}中,数字2在该数组中出现了5次,超过数组长度的一半,因此输出2.思路分析:我们利用数组的特点,找一下规律(一上述数组为例):数字“2”出现的次数超过了该数组长度的一半,也就是说:该数组中其他元素的出现的次数之和也没有数字“2”的次数多。基于这个思路,我们来定义两个数字:...原创 2018-06-02 10:01:40 · 1430 阅读 · 0 评论 -
构建乘积数组
题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。题目分析:首先我们得看清楚了,矩阵A的的A[i]位置上面的元素没有参与运算,因此,我们将B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]看成两部分来计...原创 2018-06-07 11:03:58 · 415 阅读 · 0 评论 -
数组中的重复数字
题目描述:在一个长度为n的数组里面的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。题目分析:一开始我想到的办法是,将该数组遍历一遍,去找出数字重复的元素,但是这样的做法的时间复杂度是O(n^2)。有一种简便...原创 2018-06-07 09:52:38 · 437 阅读 · 0 评论 -
顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针打印出每一个数字,例如:输入如下矩阵,则依次打印出的数字为:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10.思路分析:当我们顺时针打印该矩阵时,每一圈的起始位置是左上角的元素,并且每一圈左上角元素都有一个共同点:它的行和列所对应的的下标都是相同的。因此不难想到,该矩阵打印结束的条件就是左上角的元素下标走到了该矩阵行和列的一半...原创 2018-05-31 10:09:42 · 13053 阅读 · 0 评论 -
二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和整数,判断数组中是否含有该整数。解题思路:我们以下面3*3的矩阵(该矩阵符合题目的要求)为例,对该题进行分析。当我们要查找的元素为“10”时,由于该矩阵中不存在,因此返回false,当我们要查找的元素为“5”时,由于该矩阵你 中存在,因此返回true。通过观察...原创 2018-05-30 09:25:22 · 958 阅读 · 2 评论