- 博客(18)
- 收藏
- 关注
原创 C语言字符串函数
一,strlen求字符串长度size_t strlen ( const char * str );字符串已经'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')参数指向的字符串必须要以'\0'结束注意参数的返回值为szie_t ,是无符号的代码模拟实现:size_t my_strlen(const char*str){ size_t count = 0; while (*str) { count++; s...
2020-11-23 16:23:53
512
原创 只出现一次的数字题型总结
只出现一次的数字1给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4来源:力扣(LeetCode)class Solution {public: vector<int> singleNumber(vector<int>&a.
2020-11-20 21:59:35
632
24
原创 C语言运算符优先级小结
C语言:运算符的优先级第一级运算符后置++:先将变量的值保存到临时变量,然后计算++的值存回到变量后置--:先将变量的值保存到临时变量,然后计算--的值存回到变量前置++:先计算++的值,然后存回到变量,最后从变量中取出值传递给函数前置--:先计算--的值,然后存回到变量,最后从变量中取出值传递给函数代码区分:void text2(){ int i = 0; int j = 0; int k = 1; /* 考点: 1. 参数是从右往左传递的 2. 前置++
2020-11-20 17:35:32
3748
35
原创 结构体对齐及联合体+大小端总结
一,结构体概念:是一种新的自定义类型,由一组成员的不同数据组成的,每个成员都可以具有不同的数据类型,通常来表示类型不同但是又有 相关的若干数据。例如:一个表示学生的结构体中有:char类型的学生名字,int类型的年龄等等。struct Student{char name[20];char gender[3];int age;double hegiht;};printf("%d\n", sizeof(struct Student));//在使用是必须加上structs.
2020-11-19 17:26:09
1171
16
原创 重建二叉树(剑指 Offer)
剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7限制:0 <= 节点个数 <= 5000大概思路:二叉树的前序遍历顺序是:根节点、左子树、右.
2020-11-18 22:22:47
676
20
原创 C语言指针复习
C语言指针复习一,基本概念:指针是C语言中的一种数据类型,该类型定义的类型变量就是指针变量。在该变量存储的是一个地址。(指针变量存储的是一个地址,所以说指针就是地址,地址就是指针)二,分类:一级指针和多级指针 二级指针存储的就是一级指针的地址 *ppa访问的就是pa , **ppa访问的就是&pa (三级指针也是同样的)三,指针的使用 *和-> (->只能用于结构体和类中)四,指针的大小 在32位系统下指...
2020-11-17 17:54:33
477
23
原创 c/c++内存管理理解
首先是c语言中的内存结构:由上到下是:内核空间-栈- 动态链接库-堆-数据段-代码段。在c/c++中大部分的动态内存空间申请都在栈和堆上,栈由编译器控制,堆由程序员控制。栈与堆的区别:栈:由编译器自动分配释放,存放函数的参数,局部变量等。结构是数据结构中的栈。栈是由下到上增长的。堆:由程序员分配释放,如果不释放的话,可能会造成内存泄漏问题。结构是链式。由堆是向上增长的。1,申请方式不同:栈:栈是交由系统自动分配。堆:程序员自己通过调用(malloc,realloc等)申请的
2020-08-07 15:23:15
199
12
原创 对于定长内存分配器的简化实现
定长内存分配器:实现一个 FreeList,每个 FreeList 用于分配固定大小的内存块,比如用于分配 32字节对象的固定内存分配器。每个固定内存分配器里面有两个链表,OpenList 用于存储未分配的空闲对象,CloseList用于存储已分配的内存对象,那么所谓的分配就是从 OpenList 中取出一个对象放到 CloseList 里并且返回给用户,释放又是从 CloseList 移回到 OpenList。分配时如果不够,那么就需要增长 OpenList:申请一个大一点的内存块,切割成比如 64
2020-08-06 23:34:24
210
1
原创 对于内存池的学习和了解
什么是内存池:内存池是一种动态内存分配和管理的技术,当我们在使用new ,delete,malloc,free.等申请和释放空间会导致,内存空间的浪费。因为每次申请的空间大小,不定,频繁使用会造成大量的内存碎片降低程序和操作系统的性能。内存池就是在真正使用内存之前,先申请分配一大块内存(内存池)留作备用,当申请内存时,从池中动态分配出一块内存,当释放资源是,将内存放入池中,再次申请时再次取出,尽量与周边的空闲内存和并。如果内存池不够,自动冲操作系统中申请更大的内存池。内存池的出现就是为了更高效的管理
2020-08-06 00:37:28
378
原创 对于unordered_map和unordered_set底层哈希表的理解
哈希的概念构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。插入元素:根据待插入元素的关键码,以此函数计算出该元素的存储位置并按此位置进行存放搜索元素:对元素的关键码进行同样的计算,把求得的函数值当做元素的存储位置,在结构中按此位置取元素比较,若关键码相等,则搜索成功该方式即为哈希(散列)方法,哈希方法中使用的转换函数称为哈希(散列)函数,构造出来的结构称为哈希表(Hash Table)(或
2020-08-06 00:31:34
590
原创 对于红黑树的简单实现和理解
红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质1. 每个结点不是红色就是黑色2. 根节点是黑色的3. 如果一个节点是红色的,则它的两个孩子结点是黑色的4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点5. 每个叶子结点都是黑色的(此处的叶...
2020-08-05 00:12:52
142
原创 类模板的简单举例
类模板的定义格式template<class T1, class T2, ..., class Tn>class 类模板名{// 类内成员定义};例子:简单实现STL中vectortemplate<class T>class Vector{ public : Vector(size_t capacity = 10) : _pData(new T[capacity]) , _size(0) , _capacity(capacity) .
2020-08-04 23:21:43
350
原创 函数模板
模板概念模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。函数模板格式template<typename T1, type..
2020-08-04 23:00:08
116
原创 AVL树插入时对于旋转子树的理解
AVL树的概念 当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 它的左右子树都是AVL树 左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)平衡因子=右子树子树高度-左子树的高度AVL树的简单代码实现#pragma once#include <utility>using names
2020-08-01 18:41:27
179
原创 c++中的智能指针
1.智能指针的作用:为了防止内存泄露的问题C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。内存泄露:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内
2020-07-28 22:56:28
294
原创 右值和左值的区分即右值引用的理解
左值与右值总结左值与右值不是很好区分,一般认为:普通类型的变量,因为有名字,可以取地址,都认为是左值const修饰的常量,不可修改,只读类型的,理论上应该按照右值对待,但因为其可以取地址(如果只是const类型常量的定义,编译器不给其开辟空间,如果对该常量取地址时,编译器才为其开辟空间),C++11认为其是左值如果表达式运行结果或单个变量是一个引用则认为是左值如果表达式的运行结果是一个临时变量或者对象,认为是右值C++11中的右值右值引用,顾名思义就是对右值的引用。C++11
2020-07-28 22:49:32
1502
原创 牛客求职攻略
腾讯秋招2020(1)1、电话号码【题目描述】企鹅王国是一个奇特的国家,他们的电话号码包含11位数字,并且第一个数字一定是8。比如88888888888就是企鹅王国的电话号码,但是13888888888和000就不是。现在给出一个长度为n的字符串s,这个字符串只包含数字。每一次操作,你可以从这个字符串中删除任意一个字符。对于给定的字符串,需要你判断是否能通过0次或若干次操作,把这个字符串变成企鹅王国的电话号码。输入描述第一行一个整数t,表示测试用例的组数;接下来2∗t行,每个测试用
2020-07-22 01:08:52
277
原创 linux信号学习
信号一信号信号是什么:是一个软件中断,通知进程发生了某个时间,中断当前进程当前正在执行的操作,去处理这个事件。(事件就代表这事件)信号有多种,各自表示着不同的事件信号的生命周期:(信号的产生,在进程中注册,限号的销毁,信号的处理)(信号的阻塞( 暂时不处理))信号的种类:查看信号种类 kill -l (62种)(kill 本质是发送信号终止进程 int kil...
2019-11-22 14:31:13
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人