c++
sifanchao
这个作者很懒,什么都没留下…
展开
-
寻找两个正序数组的中位数
方案一:暴力新建一个大小为(m+n)的数组,将两个数组的值插入到新的数组,然后进行排序,最后根据奇偶返回中位数。class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<int> nums3; nums3.insert(nums3.end(),nums1.begi.原创 2020-05-26 00:33:05 · 810 阅读 · 0 评论 -
继承
继承概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程 继承权限&amp;amp;访问限定符成员限定符与继承关系 继承方式及权限对应表 总结:基类private成员在派生类中是不能被访问的,如果...原创 2018-08-13 10:00:59 · 195 阅读 · 0 评论 -
多态
多台概念多态 同一件事物在不同的场景下表现出的多种形态 C++中虚函数的主要作用就是实现多态。简单说父类的指针/引用调用重写的虚函数, 当父类指针/引用指向父类对象时调用的是父类的虚函数,指向子类对象时调用的是子类的虚函数虚函数 虚函数是一种在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。虚函数的特点是,只要定义一个基类的指针,就可以指向派生类的对象。 虚函数...原创 2018-08-13 16:51:52 · 235 阅读 · 0 评论 -
每日一题(13)
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的思路: 1. 如果二叉树为空树,则是对称的 2. 从其子树开始检测,如果根的左右子树: a. 根的左右子树均为空,则是对称的 b. 根的左右子树一棵为空,一棵不为空,则不对称 c. 根...原创 2018-08-19 20:53:18 · 183 阅读 · 0 评论 -
每日一题(11)
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度解析: 1 / \ 2 3 / / \ 4 5 6 二叉树的深度,即为二叉树的高度,...原创 2018-08-19 22:45:55 · 159 阅读 · 0 评论 -
STL
STLSTL(standard template libaray ):标准模板库,是C++程序设计语言的标准程序库, 是一个包罗算法与数据结构的软件框架STL的目的是标准化组件,所以在STL中使用了泛型编程的思想,对我们常用的数据结构:顺序表、链表、树、哈希以及常用的查找、排序等算法使用模板进行了封装,而且从运行效率以及内存使用上都基本达到了优。引入STL后,再也不需要我们重新造轮子,...原创 2018-08-21 02:05:23 · 270 阅读 · 0 评论 -
动态规划与贪婪算法
一个问题是该用递推、贪心、搜索还是动态规划,完全是由这个问题本身阶段间状态的转移方式决定的!每个阶段只有一个状态->递推;每个阶段的最优状态都是由上一个阶段的最优状态得到的->贪心;每个阶段的最优状态是由之前所有阶段的状态的组合得到的->搜索;每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到而不管之前这个状态是如何得到的->动态规划。每个阶段的最...原创 2018-09-05 10:33:07 · 1303 阅读 · 0 评论 -
智能指针
智能指针背后思想void remodel(std::string & str){ std::string * ps = new std::string(str); ... if (weird_thing()) throw exception(); str = *ps; delete ps; return;}...原创 2018-09-07 10:32:07 · 163 阅读 · 0 评论 -
解释型语言与编译型语言的区别
编译型语言,在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。...原创 2018-09-07 11:11:50 · 1512 阅读 · 0 评论 -
每日一题(10)
class ReverseStack {public: int level = 0; vector<int> reverseStackRecursively(vector<int> stack, int top) { // write code here if(top > 0){  ...原创 2018-08-12 10:01:42 · 227 阅读 · 0 评论 -
C++中,有哪四个与类型转换相关的关键字
C++与类型转换相关的四个关键字有:const_cast, static_cast, dynamic_cast, reinterpret_caststatic_cast——运算符完成相关类型之间的转换【特点】:静态转换,在编译处理期间。 【应用场合】:主要用于C++中内置的基本数据类型之间的转换,但是没有运行时类型的检测来保证转换的安全性。用于基类和子类之间的指针或引用之间的转...原创 2018-08-02 19:25:27 · 1187 阅读 · 0 评论 -
在谈构造函数&友元函数&static&内联函数&运算符重载
构造函数构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员一个合适的初始值class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day = d...原创 2018-08-11 19:43:47 · 299 阅读 · 0 评论 -
函数重载
定义函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。int Add(int left, int right) { return left+right; }double Add(double l...原创 2018-07-26 11:45:04 · 3264 阅读 · 0 评论 -
宏替换
宏的优缺点优点:增强代码的复用性。提高性能 缺点:不方便调试宏。(因为预编译阶段进行了替换)导致代码可读性差,可维护性差,容易误用。 没有类型安全的检查 C++有哪些技术替代宏常量定义 换用const#define NUM 100由于宏是预编译程序来处理,所以NUM这个名字不会加入到符号表中,如果出现编译错误时,提示信息中就不会出现NUM,...原创 2018-07-26 12:21:17 · 1542 阅读 · 0 评论 -
类
类和对象概念对象指的是类的实例,将对象作为程序的基本单元,将程序额数据封装其中,以提高软件的重用性、灵活性和扩展性。类是对象的抽象,而对象是类的具体实例 类是抽象的,不占用内存;对象时具体的,占用内存空间面向过程和面向对象 C语言是面向过程的,关注的是过程中的数据与方法。 C++是面向对象的,关注的是对象的属性和功能。类的定义class className { ...原创 2018-08-04 09:15:48 · 204 阅读 · 0 评论 -
类的6个默认成员函数
以日期类为例,说明:class Date{public: void Display() { cout &amp;lt;&amp;lt; _year &amp;lt;&amp;lt; &quot;-&quot; &amp;lt;&amp;lt; _month &amp;lt;&amp;lt; &原创 2018-08-11 10:01:50 · 215 阅读 · 0 评论 -
内存管理
用一到题先小试牛刀,来理解一下内存分布 内存分段栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。 数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。 C中的内存管理mallo...原创 2018-08-04 13:43:44 · 204 阅读 · 0 评论 -
类的特殊定义&&定位new表达式
定位new表达式定义 定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象 new (place_address) type new (place_address) type(initializer-list) place_address必须是一个指针,initializer-list是类型的初始化列表 - 调用 定位new表达式实际调用:T * ...原创 2018-08-05 08:14:44 · 210 阅读 · 0 评论 -
深浅拷贝
class String{public: String(const char *pStr = "") { /* 方法1: if (NULL == pStr) { //空串 _str = new char[1]; *_str = '\0'; ...原创 2018-08-05 10:08:58 · 998 阅读 · 0 评论 -
逆波兰表达式
逆波兰表达式也叫后缀表达式,先操作数,后操作符例如,5×(6+3)÷3-1 就是中缀表达式。下面这个就是后缀表达式:563+×3÷1- 中缀表达式变后缀表达式方法见到数字直接输出,见到符号按一定规则入栈出栈 规则就是,用当前的符号与栈顶的符号比较优先级,如果当前符号优先级小于栈顶符号的优先级,则把栈里面的符号都弹出来。括号的操作除外,括号是左括号优先级最高,不管跟啥比...原创 2018-08-10 15:21:42 · 5263 阅读 · 1 评论 -
每日一题(9)
思路:判断此字符串是否为数字字符串,如果是,压栈;否则,该串为符号位压栈时要将字符串转化为整数存储,在C99里可以用s.push(atoi(tokens[i++].c_str())),在C++11里直接用stoi当tokens[i]为符号位时,出栈拿数据计算。此时需要分两种情况,如果栈中只有一个元素,那么直接返回该元素;否则,进行计算left_num + sym + right_nu...原创 2018-08-10 17:43:38 · 175 阅读 · 0 评论 -
引用和指针的不同
指针是一个实体,而引用仅是别名。(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元; (2)引用:跟原来的变量实质上是一个东西,只不过是原变量的一个别名而已。int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整型变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。 下面...原创 2018-07-18 14:50:30 · 584 阅读 · 1 评论