C++
I_l_I
这个作者很懒,什么都没留下…
展开
-
C++初始化列表
什么是初始化列表 初始化列表是一种C++初始化列表,有初始化阶段和计算阶段两个阶段。与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。从概念上来讲,构造函数的执行可以分成两个阶段,初始化阶段和计算阶段,初始化阶段先于计算阶段。 在构造函数中对成员的操作是赋初值不能称他为初始化。因为初始化只能进行一次,而构造函...原创 2018-09-04 17:13:11 · 209 阅读 · 0 评论 -
Leetcode:876链表的中间节点
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.v...原创 2018-10-15 21:25:38 · 546 阅读 · 0 评论 -
Leetcode—328奇偶链表
题目说明:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5-&...原创 2018-10-19 19:36:07 · 301 阅读 · 0 评论 -
Leetcode:分隔链表
题目:给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5/** * Definition for singly-l...原创 2018-10-21 23:30:04 · 132 阅读 · 0 评论 -
leetcode:925长按键入
题目:你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例一:输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长按。...原创 2018-10-29 17:20:48 · 320 阅读 · 0 评论 -
leetcode:k个一组翻转链表
题目说明:给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2-...原创 2018-10-29 17:56:39 · 369 阅读 · 0 评论 -
leetcode:541反转字符串
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。示例:输入: s = “abcdefg”, k = 2输出: “bacdfeg”要求:该字符串只包含小写的英文字母。给定字符串的长度和 k 在[1, 10000...原创 2018-11-07 15:34:24 · 144 阅读 · 0 评论 -
leetcode:459重复的字符串(C++)
题目描述:给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。示例 1:输入: "abab"输出: True解释: 可由子字符串 "ab" 重复两次构成。示例 2:输入: "aba"输出: False示例 3:原创 2018-11-10 17:58:45 · 493 阅读 · 0 评论 -
leetcode:654最大二叉树(C++)
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:1.二叉树的根是数组中的最大元素。2.左子树是通过数组中最大值左边部分构造出的最大二叉树。3.右子树是通过数组中最大值右边部分构造出的最大二叉树。4.通过给定的数组构建最大二叉树,并且输出这个树的根节点。例如:思路:我们先找到数组里面的最大数,把他设置为根节点,然后递归传入最大数的左边的数组,然后继续找最大的数,...原创 2018-11-13 14:47:53 · 1216 阅读 · 0 评论 -
leetcode:98. 验证二叉搜索树(C++)
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: f...原创 2018-11-11 12:08:38 · 1289 阅读 · 1 评论 -
Leetcode:395至少有K个重复字符的最长子串(C++)
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。示例 1:输入:s = "aaabb", k = 3输出:3最长子串为 "aaa" ,其中 'a' 重复了 3 次。示例 2:输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了...原创 2018-11-08 19:43:59 · 639 阅读 · 0 评论 -
leetcode:26. 删除排序数组中的重复项(C++)
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。函数应该返回新的长度 5, 并且...原创 2018-11-08 20:58:20 · 333 阅读 · 0 评论 -
leetcode118杨辉三角(C++)
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]class Solution {public: vector<vector<int>> generate(int numRows) {...原创 2018-11-12 21:21:45 · 331 阅读 · 0 评论 -
简单理解RAII(C++)
1.什么是RAII?RAII即"资源获取即初始化" 他是一种方法,定义一个类来封装资源的分配和释放,在类的构造函数中来实现资源的分配和初始化,在类的析构函数中实现资源的释放和清理,是C++中一种管理资源,避免资源泄漏的方法。因为在C++中任何类构造的对象最终都会调用析构函数销毁。2.RAII的分类RAII对资源分配的所有权可分为常性类型和变性类型,代表为boost:shared_ptr&lt...原创 2018-11-17 16:25:33 · 2175 阅读 · 0 评论 -
(牛客)第一个只出现一次的字符(c++)
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解题思路:1.利用C++的map形成键值对,每一个字符对应一个相应的键值对,遍历字符串,当出现了一个字符串时,对他相应的键值对++,然后依据字符串的顺序进行查找,当出现第一个值为1的字符,就是第一个只出现一次的字符。2.利用has...原创 2018-12-02 11:45:15 · 1519 阅读 · 0 评论 -
Leetcode:203 移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入:1->2->6->3->4->5->6, val = 6输出:1->2->3->4->5这个问题大多数情况我们都可以考虑到,但是有的情况不容易想到,例如:1—>NULL, val = 1当删除1后,链表为空,所以我们需要在链表的头...原创 2018-10-15 21:11:04 · 285 阅读 · 0 评论 -
模拟实现Vector
Vector模拟实现,具体的Vector描述请查看https://blog.csdn.net/weixin_40853073/article/details/81413281#include<iostream>#include<stdio.h>#include<assert.h>using namespace std;#pragma once typ...原创 2018-10-14 23:09:49 · 219 阅读 · 0 评论 -
c++:内联函数
什么是内联函数 内联函数是c++为提高程序运行速度所进行的一项改进。常规函数和内联函数之间的主要区别不在与编写方式。而在于c++编译器如何将他们组合到程序中。 c++内联函数提供了一种选择。内联函数编译的代码与其他程序代码“内联”起来。也就是说编译器将使用相应的函数代码替换函数调用,是一个典型的以空间换时间的模式。对于内联代码,程序无需跳到另一处位置执行代码,在跳回来。因此内联函数的运行速度...原创 2018-08-22 17:11:03 · 172 阅读 · 0 评论 -
new和delete的用法(C++)
new来分配内存 在c语言中我们可以使用malloc来分配内存,在c++中依旧可以使用,但c++提供了一种更加高效的方法——new运算符。 在c++中,我们为一个int类型的值分配内存,并且用指针来访问这个值。我们要告诉new,需要为哪种类型的数据分配内存,new找到一个长度正确的内存,并返回该空间的地址。int *p=new int;new int告诉我们需要开辟一个int大小的内...原创 2018-08-13 10:47:24 · 772 阅读 · 0 评论 -
什么是类和对象?
类是C++新引入的一个概念,它不同于c语言的结构体。 在现实世界中,经常有属于同一类对象的总称。类内所有实力共享它的类变量。 类是定义同一类所有对象的变量和方法的蓝图或原型。 对象是实例化的类。 类的好处是提供了可重用性,类就像设计图,工厂利用设计图来制造大量的产品 对象的好处是提供了模型化和信息隐藏,对象就像产品,利用相同的蓝图一遍一遍制造产品。类的声明 类是用户自定义类型,如...原创 2018-08-06 10:13:38 · 1772 阅读 · 0 评论 -
什么是vector?
模板类vector和array是数组的替代品,当开始学习c++时突然遇见vector时也是很懵的。 模板类vector模板类vector类似于string类,是一种动态数组,可以在运行的阶段设置vector对象的长度,可在末尾添加新的数据,还可以在中间添加新的数据,基本上,它是使用new创建动态数组的替代品。实际上,vector类确实使用new和delete来管理内存。 我们不深入...原创 2018-08-04 17:30:24 · 6744 阅读 · 2 评论 -
C++中引用与指针的区别
- 引用变量的创建在C语言中&表示取地址符号,而在C++中&多了一种不一样的功能,即用来声明一个变量是另外一个变量的别名,例如:int a;int & b=a;//b是a的别名其中&不是地址运算符,而是类型标识符的一部分,是b是a的别名,所谓别名,大家可以把它看做是一个人的小名,比如说一个人叫张三小名原创 2018-08-04 09:27:34 · 418 阅读 · 2 评论 -
C++为什么支持函数重载
C++是C语言的继承,它既可以进行c语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承多态为特点的面向对象程序设计。 1.什么是函数重载 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重...原创 2018-07-24 15:44:34 · 585 阅读 · 1 评论 -
c++:什么构造函数
为什么要使用构造函数? 在C++中部分的成员是私有的,而类的私有的成员变量在类外是不允许访问的,所以这就意味着程序不能直接访问数据成员,而程序只能通过成员函数来访问数据成员,因此需要合适的成员函数,才能将成功将对象初始化。(大家就疑惑了,那直接把成员定义为公有不就可以了吗?其实这才是错误的,这样定义类的成员违背了类的主要初衷*数据隐藏*)声明和定义构造函数 成员变量为私有的要对其进行初始化...原创 2018-09-03 15:45:03 · 285 阅读 · 0 评论 -
C++:什么析构函数
为什么要使用析构函数? 利用构造函数创建对象之后,程序负责跟踪该对象,直到其过期为止,对象过期时,程序将自动调用一个特殊的成员函数——析构函数。析构函数来完成一些清理工作,例如你用new来分配空间,则析构函数将使用delete来释放这些内存,否则有可能造成内存泄漏。析构函数的特征 1)析构函数的函数名是在类名前加上字符~ 2)析构函数无参数无返回值 3)一个类有且只有一个析构函数,如果...原创 2018-09-03 16:59:39 · 1005 阅读 · 0 评论 -
C++:深浅拷贝
浅拷贝 从内存的角度来说,浅拷贝就是简单的给已经存在的内存增加了一个指针对象,这个新指针和原来的指针指向同一个内存,这样存在内存崩溃的问题,当释放内存的时候会重复释放同一块内存导致内存崩溃. 举例一个简单的赋值浅拷贝class String{public: String(const char *str) :_str(new char[strlen(str)+1...原创 2018-09-04 00:00:43 · 157 阅读 · 1 评论 -
C++:类继承(一)
继承的概念 继承机制是面向对象程序设计是代码复用的重要手段,它允许程序员在保持类原有特性基础下,进行扩展增加功能。这样产生新的类,称为派生类,继承体现了面向对象设计的层次结构,体现了由简单到复杂的认知过程。继承的三种形式 1)公有继承——public:基类的公有变为派生类的公有,基类的保护变为派生类的保护,私有派生类不可访问 2)私有继承——private:基类的公有变为派生类的私有,基...原创 2018-09-07 12:34:20 · 7778 阅读 · 1 评论 -
C++:类继承——赋值兼容规则(切片)
赋值兼容规则—public继承 1)子类对象可以为父类对象赋值(切片) 2)父类对象不能赋值给子类对象 3)父类的指针引用可以指向子类对象 4)子类的指针引用不能指向父类对象(可以通过强制类型转换完成,但是不能调用成员函数,会崩溃)...原创 2018-09-20 00:07:18 · 479 阅读 · 0 评论 -
leetcode:557 反转字符串的单词
题目来源:leetcode题目描述:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。例如:输入: “Let’s take LeetCode contest”输出: “s’teL ekat edoCteeL tsetnoc”这道题的测试用例很长,一般的两个循环式跑不过的,以下是其中一部分测试用例,后面还有很长![在这里插入图片描述...原创 2018-10-03 12:27:49 · 235 阅读 · 0 评论 -
LeetCode:二叉树减枝(C++)
题目:给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)示例1:输入: [1,null,0,0,1]输出: [1,null,0,null,1]解释:只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。说明:给定的二叉树最多有 1...原创 2018-09-21 17:28:53 · 383 阅读 · 0 评论 -
牛客网:判断两棵树是否相同
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 ...原创 2018-10-12 14:54:12 · 433 阅读 · 0 评论 -
(剑指offer)求二进制中1的个数(C++)
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:通过题目描述,我们首先对题目的要求进行分析,首先我们考虑位运算的右移,然后与1相与,但是我们要考虑到当系统给的数字为负数时,单纯的采用右移的方式,会出现错误,因为负数的右移最高位补位会补1所以肯定会出现错误。所以我们采取不同的方法,定义一个flag=1,对flag进行左移,然后与该数相与,当结果为1的时候count++...原创 2018-12-02 11:53:54 · 743 阅读 · 0 评论