自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 linux--多线程(一)

如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失,这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。pthread_create函数第一个参数指向一个虚拟内存单元,该内存单元的地址即为新创建线程的线程ID,属于NPTL线程库的范畴,线程库的后续操作,就是根据该线程ID来操作线程的。编写多线程程序需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,也就是说线程 之间是缺乏保护的。

2023-03-01 00:03:38 348 1

原创 C++11--包装器与可变参数摸板

有可能是一个函数,有可能是一个函数指针,有可能是一个仿函数,也有可能是一个lambda表达式。这些都是可调用的类型,如此丰富的类型,可能会导致模板的效率低下。一般而言,我们用它可以把一个原本接收N个参数的函数,通过绑定一些参数,返回一个接收M个(M可以大于N)参数的新函数。我们无法直接获取参数包args中的每个参数,只能通过展开参数包的方式来获取参数包中的每个参数。前面有省略号,所以它就是一个可变模板参数,我们把带省略号的参数称为“参数包”,它里面包含了。函数还可以实现参数顺序调整等操作。

2022-12-18 19:54:07 458

原创 Linux--信号

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定义,编号34以上的是实时信号。

2022-08-27 15:15:27 421

原创 C++11--lambda表达式

e.在块作用域中的lambda函数仅能捕捉父作用域中局部变量,捕捉任何非此作用域或者非局部变量都会导致编译错误。上面的这个例子就是使用C++11中的Lambda表达式来解决的,可以看出lambda表达式实际是一个匿名函数。在Lambda函数的定义中,**参数列表和返回值类型都是可选部分,而捕捉列表和函数体可以为空。通过上述例子可以看出,lambda表达式实际上可以理解为无名函数,该函数。函数对象,又称为仿函数,即可以像函数一样使用的对象,就是在类中重载了。,如果想要直接调用,,即使看起来类型相同。...

2022-07-20 22:22:31 312

原创 C++11右值引用

在中可以用花括号对数组等类型进行 初始化,可是对于自定义的数据类型却不能进行初始化,比如:这样的语法导致我们在定义vector时,都需要把vector定义出来,然后使用循环对其赋值,非常的不方便。C++11扩大了用大括号括起来的列表(初始化列表)的使用范围,使其可用于所有的内置类型和用户自定义的类型,使用初始化列表的时候,可以添加等号也可以不加等号自定义类型的列表初始化标准库支持单个对象的列表初始化多个对象的列表初始化多个对象想要支持列表初始化,需要给该类(模板类)添加一个带有initia

2022-07-13 23:13:36 393

原创 Linux进程控制--程序替换

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序,当进程调用exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。有6中以exec开头的函数,统称exec函数:函数解释命名理解我们发现这些函数的名字都差不多,之后后面几个字母不一样exec调用举例当我们在命令行输入时就会显示出当前路径下的文件和目录的信息那么我们使用程

2022-06-24 16:42:13 234

原创 搜索二叉树

二叉搜索树又称为二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:二叉搜索树的查找二叉搜索树的插入定义二叉搜索树的结点实现搜索二叉树

2022-06-18 17:36:16 2676

原创 STL--vector模拟实现

STL中vector的模拟实现

2022-06-15 12:43:00 153

原创 Linux--进程控制

在Linux中函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。进程调用fork,当控制转移到内核中的fork代码后,内核做:当一个进程调用fork之后,就有两个二进制代码相同的进程,而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,举个例子我们在执行上面的代码之后发现一共有三行输出,第一行before是在只用fork创建线程前的pid,后面两行是在使用fork创建线程之后的pid。为什么只有一个before却又两个after呢?而且一个after的

2022-06-13 23:57:16 152

原创 Linux--程序地址空间

linux下虚拟地址,页表以及内存之间的关系

2022-05-27 12:27:21 263 1

原创 C++初阶--list容器

list容器的介绍,以及模拟实现

2022-05-26 20:53:10 307

原创 Linux--环境变量

linux下进程优先级的理解,环境变量的理解

2022-05-15 19:40:19 283

原创 Linux--进程状态

进程的常见几种状态,进程的运行时状态、僵尸进程、孤儿进程

2022-05-13 13:07:15 712

原创 Linux进程的概念

进程就是程序文件内容+相关数据结构,PCB的概念

2022-05-05 16:49:51 191

原创 C++多态

C++多态得原理

2022-05-05 00:30:21 225

原创 C++继承

C++继承的特点,虚拟继承详解,C++菱形继承

2022-04-21 19:23:17 955

原创 C++初阶--vector

文章目录vector介绍vector的使用vector的定义vector iterator的使用vector的空间增长问题vector的增删改查vector迭代器失效问题vector介绍vector是表示可变大小数组的序列容器就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理从本质来讲,vector使用动态分配数组来存储它的元素。当新元素插入时,如果

2022-04-18 22:36:22 1016

原创 Linux开发工具--makefile

Linux的小工具,makefile、git等的使用,Linux进度条程序

2022-04-17 23:42:27 3115

原创 模拟实现String

c++标准模板库的string模拟实现,一看就会,string就是这么简单

2022-04-09 00:07:27 216

原创 Linux--gcc&g++的使用

程序编译的四个过程、gdb、gcc的使用

2022-03-29 00:12:22 1732

原创 Linux--vim的使用

vim的一些基本操作,常用的命令,如何使用vim

2022-03-21 00:21:27 1342

原创 C++标准模板库--string类

c++中string类的一些常用函数

2022-03-13 18:43:55 1795

原创 Linux权限管理

文件目录的权限,权限掩码,如何使用sudo指令

2022-03-09 00:34:40 249

原创 C++模板(初阶)

c++的模板入门,c++泛型编程

2022-03-06 18:01:07 98

原创 Linux入门篇--常见指令

linux常用的指令介绍

2022-02-27 23:13:28 264 1

原创 C++内存管理

new的实现原理,new和malloc的区别,C++的动态内存规划

2022-02-23 22:31:39 134 1

原创 C++类和对象篇--下

友元类,内部类,友元

2022-02-17 12:29:44 303

原创 C++类和对象--中

c++赋值运算符重载,cosnt成员函数,拷贝构造函数

2022-02-08 15:14:24 581

原创 C++类和对象篇--上

this指针详解,class关键字和struct关键字的区别,c++如何定义类

2022-02-04 16:56:39 541

原创 C++入门篇--语法糖

auto关键字,范围for循环

2022-02-02 16:48:28 1970

原创 C++入门篇--内联函数和extern关键字

了解C++的内联函数,c++使用C语言编写的静态库需要使用关键字extern"C"

2022-01-20 23:27:18 523

原创 C++入门篇--引用

c++引用,看这一篇就够了,很细节!!!

2022-01-18 22:39:34 335

原创 二叉树以及堆讲解

二叉树和堆的一些讲解

2022-01-11 23:30:13 795

原创 栈和队列的实现

栈和队列栈栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。**压栈:**栈的插入操作叫做压栈,入数据在栈顶**出栈:**栈的删除操作叫做出栈,出数据也在栈顶我们可以把栈想象成一个桶,只能从桶口放东西进去,要想取出东西也只能从桶口里取出来。所以先放进去的会后取出来。如果想要拿到栈底的数据就必须把它前面的数据全部取出,才能取到栈底的数据。栈的实现栈的实现一般可以使用数组或链表实现,相对而言数

2022-01-09 15:07:51 232

原创 C++入门篇--函数

c++函数重载的基本原理

2021-12-04 20:36:36 2077

原创 C++入门篇--命名空间

C++入门篇–命名空间C++是一门很优秀的语言,C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。所以C++是一种面向对象的语言。要学C++得有c语言得基础,这样学着会稍微轻松一点。我感觉,C++是在弥补C的不足之处,接下来我们就来讲讲C++的一些新东西。命名空间

2021-12-03 20:27:29 402 2

原创 C语言:带头双向环形链表

双向循环链表上一次我们讲了单向无头非循环链表的实现,单向无头非循环链表的特点是:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构。而带头双向循环链表则恰恰与无头单向非循环链表相反,它的结构最复杂,一般用来单独存储数据。这个结构虽然复杂,但是使用单吗实现后会发现,这个结构用起来很简单。结构示意图带头双向循环链表在逻辑上大概就是这样的一个样子,链表的最后一个节点的后继指向的是头结点。而头结点的前驱则是指向链表的最后一个结点。所以,一个空的带头双向循环链表的逻辑结构应该是这样的:

2021-11-25 01:00:48 850

原创 C语言数据结构单链表链表

数据结构–单链表学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受。那么有没有一种结构可以让我们存放数据的操作变得简单一些呢?这就要用到线性结构的另一种–链表链表的概念及结构链表是一种物理存储结构上非连续、非顺序的的存储结构,数据元素的国际顺序是通过链表中的指针链接次序实现的。如下图:注意:从上图可以看出,链式结构在逻辑上是连续的,但是在物理上不一定连续现实中的结点一般都是从堆上申请出来的

2021-11-15 01:21:41 998

原创 C语言:顺序表的实现

标题C语言实现顺序表线性表的定义线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串线性表在逻辑上是线性结构,也就是说是一条直线。但在物理结构上线性表并不一定是连续的空间,线性表在物理上存储时,通常释疑数组和链式结构的形式存储。顺序表的定义顺序表时用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。可分为静态顺序表和动态顺序表1、静态顺序表:使用定长数组存储元

2021-11-06 00:47:20 816

原创 算法的时间复杂度和空间复杂度

【C语言】数据结构入门之算法的时间复杂度和空间复杂度我们在写一个程序的时候,对于同一个问题往往有多种方法去解决。那么在有许多种方法的时候应该怎么去选择呢?时候就需要我们从时间复杂度和空间复杂度这两个方面去对比,然后选出最优的解。算法的效率我们都知道,不同的算法是存在优劣之分的,那么应该怎么去衡量一个算法的好坏呢?算法在编写成可执行程序之后,运行时需要耗费时间资源和内存资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。时间复杂度主要衡量一个算法的运行快慢,而空间

2021-10-25 12:59:08 248

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除