c++
番茄都是西红柿
大家一起交流学习啊~
展开
-
判断二叉树是否是平衡二叉树(C++)
输入一棵二叉树,判断该二叉树是否是平衡二叉树。class Solution {public: bool IsBalanced_Solution(TreeNode* pRoot) { if(pRoot==NULL) return true; int rightDepth=getDepth(pRoot->right); ...原创 2018-09-14 18:53:20 · 2141 阅读 · 0 评论 -
继承与静态成员
父类的static变量和函数在派生类中依然可用,但是受访问性控制(比如,父类的private域中的就不可访问),而且对static变量来说,派生类和父类中的static变量是共用空间的,这点在利用static变量进行引用计数的时候要特别注意。 static函数没有“虚函数”一说。因为static函数实际上是“加上了访问控制的全局函数”,而全局函没有虚函数。派生类的friend函数可以访问...原创 2018-08-06 20:14:33 · 352 阅读 · 0 评论 -
如何解决友元中无法继承的问题
友元声明friend class是无法继承的。举例说明:class A声明class B为其友元类,也就是说class A授予class B访问class A的所有包括私有成员在内的所有成员。如果class C 继承class B.那么class C是不具备这种特权的。 但是如果我想在class C中访问class A的某个私有或者保护成员函数怎么办? 我们可以把工作交给父类。#inclu...原创 2018-08-06 17:10:25 · 905 阅读 · 0 评论 -
C++实现一个复数类
#include <iostream>#include<stdlib.h>using namespace std;class Complex{public: Complex(double real, double image); Complex operator + (const Complex &c); Complex opera...原创 2018-08-06 16:48:39 · 1226 阅读 · 0 评论 -
C++子类对象隐藏了父类的同名成员函数
#include &amp;lt;iostream&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;string&amp;gt;using namespace std;/*** 定义人类: Person* 数据成员: m_strName* 成员函数: attack()*/class Person{public: Per转载 2018-08-06 12:06:41 · 274 阅读 · 0 评论 -
构造函数为什么不能用const来修饰?
const修饰函数表示该函数的返回值是const类型的,改返回值只能赋值给同类型的const变量。 const是可以修饰类的成员函数,但是该函数不能修改数据成员。构造函数也属于类的成员函数,但是构造函数是要修改类的成员变量,所以类的构造函数不能申明成const类型的。...原创 2018-08-01 13:29:17 · 4137 阅读 · 0 评论 -
构造函数为什么不可以为虚函数
1,从存储空间角度 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。 2,从使用角度 虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初...原创 2018-08-01 13:25:08 · 256 阅读 · 0 评论 -
浅析C++this指针
什么是this指针?this指针的作用是什么?this指针有哪些特性?this指针传参方式?为什么叫this指针而不是引用呢?this指针有没有可能为空?this指针容易混淆点 1) 什么是this指针? this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。举例来说:当你进入一个房子后,你可以看见桌子、椅子、地板等,...原创 2018-07-31 11:05:17 · 1464 阅读 · 0 评论 -
C++中的this指针
先给一个简单的类:#include<iostream>using namespace std;class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static in...转载 2018-07-31 09:48:26 · 134 阅读 · 0 评论 -
C++右值引用
链接:https://www.zhihu.com/question/22111546/answer/30801982 来源:知乎 右值引用是C++11中最重要的新特性之一,它解决了C++中大量的历史遗留问题,使C++标准库的实现在多种场景下消除了不必要的额外开销(如std::vector, std::string),也使得另外一些标准库(如std::unique_ptr, std::funct...转载 2018-07-29 20:25:04 · 269 阅读 · 0 评论 -
赋值运算符函数
题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数:class CMyString{public: CMyString(char* p_Data = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;};首...原创 2018-08-07 11:00:59 · 3669 阅读 · 0 评论 -
用C/C++语言测试函数运行时间多种方法详解
目前,存在着各种计时函数,一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间,但是各种计时函数的精度不一样.下面对各种计时函数,做些简单记录.void foo(){ long i; for (i=0;i&amp;lt;100000000;i++) { ...原创 2018-08-13 08:50:57 · 911 阅读 · 0 评论 -
链表面试题—反转链表
Reverse a singly linked list. Example: Input: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL Output: 5-&gt;4-&gt;3-&gt;2-&gt;1-&gt;NULL Follow up: A linked list can be rever原创 2018-08-08 14:44:50 · 249 阅读 · 0 评论 -
求二叉树深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x...原创 2018-09-13 10:37:29 · 308 阅读 · 0 评论 -
C++中vector的基本用法
在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。1 基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout&amp;lt;#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;algorithm&amp;gt;#incl原创 2018-08-17 17:29:42 · 469 阅读 · 0 评论 -
LeetCode709. 转换成小写字母
实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。 Example 1:Input: “Hello” Output: “hello” Example 2:Input: “here” Output: “here”class Solution {public: string toLowe...原创 2018-08-17 16:20:59 · 218 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7中序遍历:访问根结点 根节点的左结点进行中序遍历根结点...原创 2018-08-23 00:27:37 · 435 阅读 · 0 评论 -
LeetCode2. 两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807public ListNode...原创 2018-08-19 16:46:50 · 151 阅读 · 0 评论 -
LeetCode695. 岛屿的最大面积(深度优先DFS和广度优先BFS算法 )
给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)示例 1: [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0]...原创 2018-08-16 11:47:24 · 1760 阅读 · 0 评论 -
LeetCode:771. 宝石与石头
问题描述:给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此”a”和”A”是不同类型的石头。 示例 1: 输入: J = “aA”, S = “aAAbbbb” 输出:3示例 2: 输入: J ...原创 2018-08-16 10:45:37 · 229 阅读 · 0 评论 -
LeetCode832. 翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1],[0,0...原创 2018-08-18 18:28:57 · 503 阅读 · 0 评论 -
C++中多态和虚表详解
多态多态的这个概念稍微有点模糊,如果想在一开始就想用清晰用语言描述它,让读者能够明白,似乎不太现实,所以我们先看如下代码:例1 #include &amp;lt;iostream&amp;gt; using namespace std; class Vehicle { public: Vehicle(float speed,int total) ...转载 2018-08-13 11:35:32 · 987 阅读 · 0 评论 -
C++中指针和引用区别---详解版
下面用通俗易懂的话来概述一下:指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&amp;amp;amp;amp;amp;表示X类型的引用。见下图,所示引用的含义: 2、指针和引用的区别 首先,引用不可以为空,但...原创 2018-07-29 17:26:40 · 26605 阅读 · 10 评论 -
C语言和C++的区别
1、关键字 蓝色标注为C语言关键字,C++继承了C语言的所有关键字,以下红色标注为C++中含有但C语言没有的关键字(根据c++98中提出C++包含63个关键字) 2、源文件区别 C语言文件后缀为.c,c++原文件名后缀为.cpp 如果在创建源文件时什么都不给,默认是.cpp 3.返回值不同 C语言中,如果一个函数没有指定返回值类型,默认为int类型,并返回一个随机数,一般为0XCC...原创 2018-07-29 16:12:23 · 23271 阅读 · 4 评论 -
A+B问题
问题描述 输入A、B,输出A+B。 说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。 输入格式 输入的第一行包括两个整数,由空格分隔,分别表示A、B。 说明:“输入格式”是描述在测试你的程序时,所给的输入一定满足的格式。源代码C++:#define CRT_SECURE_NO_DEPRECATE#include<stdio.h>#include&l...原创 2018-03-23 18:37:00 · 210 阅读 · 0 评论 -
蓝桥杯练习题---序列求和(c++)
问题描述 求1+2+3+…+n的值。 输入格式 输入包括一个整数n。 输出格式 输出一行,包括一个整数,表示1+2+3+…+n的值。 样例输入 4 样例输出 10 样例输入 100 说明:有一些试题会给出多组样例输入输出以帮助你更好的做题。一般在提交之前所有这些样例都需要测试通过才行,但这不代表这几组样例数据都正确了你的程序就是完全正确的,潜在的错误可能仍然导致你的得分...原创 2018-03-23 18:09:26 · 1322 阅读 · 0 评论 -
蓝桥杯练习题--求圆面积(c++)
问题描述 给定圆的半径r,求圆的面积。 输入格式 输入包含一个整数r,表示圆的半径。 输出格式 输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。 说明:在本题中,输入是一个整数,但是输出是一个实数。对于实数输出的问题,请一定看清楚实数输出的要求,比如本题中要求保留小数点后7位,则你的程序必须严格的输出7位小数,输出过多或者过少的小数位数都是不行的,都会被认为错误。...原创 2018-03-23 17:37:15 · 1330 阅读 · 0 评论 -
c++普通版string类
#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;class String{public: String(char* pStr = "") { if (NULL == pStr) { _pStr = new c...原创 2018-03-12 15:30:53 · 263 阅读 · 0 评论 -
在C++中深拷贝和浅拷贝的基本用法
首先,什么是浅拷贝?什么是深拷贝? 浅拷贝:在C++中,在用一个对象时,只是复制了成员,并没有复制资源,使两个对象同时指向了同一资源的复制方式称为浅拷贝;(简单的来说就是成员数据间的赋值—数据拷贝) 深拷贝:是指向内容复制到当前对象新分配的缓存缓冲区中的一种复制方式。(—地址拷贝) 我们在学习编程语言过程中常见的拷贝方式如下这种,这是简单的普通对象拷贝: int a=12; int b=a原创 2017-11-12 19:12:06 · 441 阅读 · 0 评论 -
C++知识总结思维导图
学习C++已经有俩个多月了,感觉C++学习就是先符合理论→上机练习→再总结→再练习的一个认识过程。一开始要具有一定的计算机理论基础知识,了解最基本的概念,具备了入门的条件,就可以开始编程的实践,从实践中可以发现问题需要加强计算机理论知识的不断总结。总之,C++学习就是一个不断进行代码练习和知识点总结的过程。以下就是我对整个C++体系囊括知识点的总结图,希望对大家有帮助。原创 2017-12-07 00:43:31 · 1910 阅读 · 0 评论 -
复数类
#include <iostream>#include<stdlib.h>using namespace std;class Complex{public: Complex(double real, double image); Complex operator + (const Complex &c); Complex operator - (const Comp原创 2017-10-31 20:16:48 · 336 阅读 · 0 评论 -
关于日期类
**类是一个数据类型,它的变量就是一个对象,除了具有成员函数,还能容纳数据值。所以,在一个C++程序中,类的定义应该是一个数据类型定义,它描述变量能容纳哪些种类的值,以及成员函数有哪些。而下面定义的Data类型是一个类定义,这个类的容纳对象是日期值。 在生活中我们想知道某天之后或某天之前是哪一天?或者距离这一天距离那天还有多少天? 下面代码就是一个简单的模拟日历的计算器** 代码如下:#原创 2017-10-28 19:55:47 · 302 阅读 · 0 评论 -
用循环打印01字串
问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:0000000001000100001100100请按从小到大的顺序输出这32种01串。#include<stdio.h>#include<iostream>using namespace std;int main(){ for (i...原创 2018-03-25 16:36:21 · 227 阅读 · 0 评论 -
闰年判断
问题描述 给定一个年份,判断这一年是不是闰年。当以下情况之一满足时,这一年是闰年:年份是4的倍数而不是100的倍数;年份是400的倍数。其他的年份都不是闰年。输入格式 输入包含一个整数y,表示当前的年份。 输出格式 输出一行,如果给定的年份是闰年,则输出yes,否则输出no。 源代码:#include<stdio.h>#include<i...原创 2018-03-25 16:56:15 · 5481 阅读 · 0 评论 -
蓝桥杯--字母图形问题
问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。 输出格式 输出n行,每个m个字符,为你的图形。 样例输入 5 7 样例输出 ...原创 2018-03-26 17:42:16 · 166 阅读 · 0 评论 -
C++智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_ptr、...原创 2018-07-24 11:47:49 · 442 阅读 · 0 评论 -
内存分配中new和malloc的区别?delete和free的区别?
new与malloc的区别: 1、申请的内存所在位置 new是一种操作符,从自由存储区上为对象动态分配内存空间;而malloc是从内存池中提取一块合适的内存,即从堆上动态分配内存空间。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符申请的内存都在自由存储区。而堆操作系统的术语,是操作系统所维护的一块特殊内存,用于动态分配。自由存储区可以是堆也可以为静态存储区(取决于o...原创 2018-06-09 00:45:32 · 3432 阅读 · 0 评论 -
面试题—100盏灯问题
问题描述:有100盏灯,编号依次为1,2,3.100,电灯全部关着。现在来了100个人,第一个人把所有的灯开关按下;第二个人隔一个灯按下(2,4,6…);第三个人每隔两个灯按下(3,6,9…).第100个人隔99个灯按下(100),最后还有几盏灯,那几盏灯亮着? 问题分析:由于所有灯都全部关着,我们可以知道当灯被按下次数为奇数时灯亮,偶数时灯灭。每盏灯的开关被按下次数与其编号的正约数个数有关系。...原创 2018-04-17 18:35:40 · 7669 阅读 · 0 评论 -
C++中的继承
继承方式继承方式位于定义子类的”:”后面,比如:class Line : public Object //是public继承{};继承方式默认为private在C++中,继承方式共有3种:public继承-指父类的成员(变量和函数)访问级别,在子类中保持不变private继承-指父类的成员,在子类中变为private私有成员.-也就是说子类无法访问父...原创 2018-04-16 22:59:40 · 137 阅读 · 0 评论 -
函数的重载、重写、隐藏
重载:1、在同一作用域中。2、函数名相同、参数个数或参数类型不同,返回值可同可不同。3、重载又称为静态多态,静态绑定,静态决议等。因为要实现重载,所以C++和C的命名方式有所不同。重载主要是为了减轻程序员对函数名的记忆负担,让所有功能相似的函数使用同一名字。4、任何程序都仅有一个 main 函数的实例。main 函数不能重载。 5、函数重载和重复申明的区别:如果两个函数声明的返回类型和形参表完全...原创 2018-04-16 22:26:45 · 211 阅读 · 0 评论