自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL string容器用法

1 String概念string是C++标准库的一个重要的部分,主要用于字符处理。C++的算法库对string类也有着很好的支持,并且string类还和C语言的字符串之间有着良好的接口。2 String和char的比较string是一个类,char是一个指向字符的指针。string封装了char*,管理这个字符串是一个char*型的容器。string不用考虑内存释放和越界。string管理char所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。st

2021-12-12 12:52:09 1472

原创 MySQL中的主键

1 概念primary key用来唯一的约束字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键,而且主键所在的列通常是整数类型。2 主键创建的方法2.1 直接创建主键2.1.1 单键创建表的时候直接在字段上指定主键。2.1.2 复合主键在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。2.2 追加创建主键当表创建好以后,可以再次追加主键,格式为:alter table 表名 add primary

2021-10-16 11:45:31 7550

原创 strcpy和memcpy的区别

1 strcpy函数1.1 函数原型char strcpy(char dest, const char src);1.2 函数功能strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char。1.3 说明src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。2 memcpy函数2.1 函数原型void *memcpy(void *str1, const void *st

2021-10-14 20:50:51 332 1

原创 Linux 的du和df命令

1 du命令1.1 概念du的英文名为disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。1.2 选项(1)-s:对每个Names参数只给出占用的数据块总数。(2)-a:递归地显示指定目录中各文件及子目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各自目录所占的磁盘块数。(3)-b:以字节为单位列出磁盘空间使用情况。(4)-c:最后再加上一个总计(系统默认设置)。(5)-l:计算所有的文件大小,对硬链接文件,则计算多

2021-10-14 10:08:58 926

原创 Linux UDP协议

1.1 报文头格式UDP指用户数据报协议,其报头格式如下:释:16位UDP长度表示整个数据报(UDP首部+UDP数据)的最大长度。如果校验和出错就会直接丢弃。2.1 UDP的特点UDP传输的过程类似于寄信,其特点是无连接、不可靠和面向数据报。2.1.1 无连接知道对端的IP和端口号就直接进行传输,不需要建立连接。2.1.2 不可靠没有确认机制,没有重传机制。如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。2.1.3 面向数据报不能够灵活的控制读写数据的次数

2021-10-06 01:31:18 447

原创 Linux的netstat命令

netstat是一个用来查看网络状态的重要工具。(1)语法:netstat [选项](2)功能:查看网络状态。(3)常用选项:1)n:拒绝显示别名,能显示数字的全部转化成数字。2)l:仅列出有listen(监听)的服务状态。3)p:显示建立相关链接的程序名。4)t(tcp):仅显示tcp相关选项。5)u(udp):仅显示udp相关选项。6)a(all):显示所有选项,默认不显示listen相关的信息。【例】...

2021-10-04 21:35:46 117

原创 Linux下ps参数详解

1.1 ps的概念Linux命令ps:(Process Status的缩写),该命令常常用来列出系统中当前运行的进程。ps是显示瞬间进程状态,并不动态连续。如果想对进程进行实时监控应该用top命令。2.1 常见参数(1)-a:显示所有终端机下执行的进程,除了阶段作业领导者之外。显示现行终端机下的所有进程,包括其他用户的进程。(2)-A:显示所有进程。(3)-c:显示CLS和PRI栏位。列出进程时,显示每个进程真正的指令名称,而不包含路径,参数或常驻服务的标示。(4)-C:<指令名称>

2021-09-18 21:32:59 4572

原创 Linux 读写锁

一、读写锁的概念在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高得多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时比较长。给这种代码段加锁,会极大地降低程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢?那就是读写锁。读写锁的本质是一种自旋锁。注意:写独占,读共享,写锁优先级高。二、读写锁接口1、初始化int pthread_rwlock_init(pthread_rwlock_t *restrict rwl

2021-09-17 10:54:32 1262

原创 POSIX信号量

POSIX信号量和System V信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源,但是POSIX可以用于线程间同步。该类函数存放在semaphore.h头文件中。1、初始化信号量int sem_init(sem_t *sem, int pshared, unsigned int value);参数:(1)pshared:0表示线程间共享,非零表示进程间共享。(2)value:信号量初始值。2、销毁信号量int sem_destroy(sem_t *sem);3、等待信号量(

2021-09-16 23:21:12 139

原创 IP地址转换函数

1、概念基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位 的IP 地址。网络字节顺序的IP地址是二进制的数据,但是通常用点分⼗进制的字符串表⽰IP 地址,为了方便使用需要转换为点分十进制的字符串。例如:128.2.194.242就是地址0x8002c2f2的点分十进制表示。应用程序可以使用以下库函数实现IP地址与点分十进制串的转换,它们存放在<arpa/inet.h>头文件中。2、IP地址转换函数(1)int ine

2021-09-02 00:02:46 2410

原创 C语言格式输出

格式说明由“%”和格式字符组成,如:%d%f等。它的作用是将输出的数据转换成指定的格式输出。格式说明总是由“%”字符开始的。格式字符有:d、o、x、u、c、s、f、e、g等。1、%d整形输出,%ld长整形输出。2、%o以八进制数形式输出整数。3、%x以十六进制形式输出整数,或输出字符串的地址。4、%u以十进制数输出unsigned型整数(无符号数)。注意:%d与%u有无符号数值范围。5、%c用来输出一个字符。6、%s用来输出一个字符串。7、%f用来输出实数,以小数形式输出,默认情况下保留小数

2021-07-12 16:08:09 2618

原创 对死锁的基本认识

1、死锁的含义死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用将无法推进下去。2、产生死锁的原因(1)系统资源不足;(2)进程运行的推进顺序不合适;(3)资源分配不当等。总之:如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有线的资源而陷入死锁。其次,进程运行的推进顺序与速度不同,也可能产生死锁。3、产生死锁的四个必要条件(1)互斥条件:一个资源每次只能被一个进程使用。(2)占有且等待:一个进程因请求资源而阻

2021-07-05 09:23:07 187

原创 进程间关系

1.1 进程组每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都有一个组长进程。组长进程的标识是进程组ID等于进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组一个进程存在,则该进程组就存在,这与其组长进程是否终止无关。实例如下:释:(1)&:表示将进程组放在后台执行。(2)父进程PPID:11954。(3)进程PID:12

2021-06-11 15:32:38 297 2

原创 Linux 守护进程

1.1 认识守护进程守护进程也称为精灵进程(daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性的执行某种任务或等待某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如:ftp服务器,ssh服务器,web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond等。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止

2021-06-10 17:56:42 6143

原创 打印从1到最大的n位数

题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999。【例】#include<iostream>#include<stdlib.h>#include<stdbool.h>using namespace std; void PrintNumN(int n){ int number =...

2020-02-01 11:19:21 404

原创 数值的整数次方

题目:实现函数double Power(double base, intexponent),求base的exponent次方。不得使用库函数pow,同时不考虑大数问题。解题分析1、基数为0,指数小于0的情况,会导致程序出错,要进行特殊处理;2、当基数不为0,指数小于0的情况,即求整数指数幂的倒数;3、当基数不为0,指数大于0的情况,即求整数指数幂。方法一:递乘的方法#include&...

2020-01-05 18:34:22 243

原创 字符串的排列

题目:输入一个字符串,打印出该字符串中字符的所有排序。例如:输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bca、bac、cab、cba。解题思路:(1)求所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。(2)把后面的所有字符分成两部分:1)后面字符的第一个字符,以及这个字符之后的所有字符;2)然后用第一个字符逐一和它后面的字符交换...

2019-12-10 10:49:23 249 1

原创 仿函数

函数对象function objects,又名仿函数,一种行为类似函数的对象,调用者可以向函数一样使用该对象,其实现起来也比较简单:用户只需要实现一种新类型,在类中重载operator()即可,参数根据用户所要进行的操作选择匹配。如下所示:class FunctionObjectType { public: void operator() { statements...

2019-11-24 17:01:41 416

原创 iterator

1、迭代器的概念迭代器(iterator)是一种抽象的设计概念,是设计模式的一种,其定义如下:提供一种方法,使之能够依次寻访某个容器所包含的所有元素,而又无需暴露该容器底层的结构。2、迭代器的本质迭代器实际是一种行为类似指针的对象,因此指针的所有操作迭代器都支持,使用迭代器时向使用指针一样去使用。比如:指针的解引用、成员访问、前置/后置++、前置/后置–、==、!=等迭代器支持,但是迭代器是...

2019-11-22 23:14:48 1814

原创 multimap

1、multimap的概念multimap和map的唯一差别就是map中的key必须是唯一的,而multimap中的key是可以重复的,其底层结构及方法接口与map完全相同。2、multimap的基本操作使用map时,必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。...

2019-11-20 22:24:39 1427

原创 map

1、map简介(1)map的特性map的所有元素都会根据元素的键值自动排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值,底层机制由红黑树实现。(2)map的性质当客户端对它进行元素新增操作或删除操作时,操作之前的所有迭代器,在操作完成之后都依然有效。2、map的基本操作使...

2019-11-20 22:05:19 1503

原创 unordered_map

1、multimap的概念multimap和map的唯一差别就是map中的key必须是唯一的,而multimap中的key是可以重复的,其底层结构及方法接口与map完全相同。2、multimap的基本操作使用map时,必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。...

2019-11-20 21:36:26 1857

原创 STL中的multiset

1、基本概念multiset与set唯一的不同就是:multiset中的元素可以重复,而set不可以重复。2、multiset的操作使用multiset时必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。(5)empty():数据的判空。(6)size():获取有...

2019-11-14 23:44:24 319

原创 STL中的set

1、set的基本概念set与map相同的是:底层均采用红黑树,因此所有元素都会根据元素的键值自动排序,与map不同的是:map中存放真正的键值对<key,value>,而set中的value就是key,key就是value,虽然set提供给用户的接口只存放value,而实际底层真正存放的是<value, value>的键值对,即set中key就是value,value就...

2019-11-14 23:38:21 333

原创 STL中的priority_queue

1、priority_queue概述(1)priority_queue是一个拥有权值观念的queue,它允许加入新元素、移除旧元素、审视元素值等功能。因为这是一个queue,所以只允许再底端加入元素,并从顶端取出元素。(2)priority_queue带有权值观念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列。权值最高者排在最前面。(3)缺省情况下priority_queu...

2019-10-24 15:45:23 370

原创 STL中的queue

1、queue概述queue是一种先进先出的数据结构。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,但是没有迭代器,不允许遍历。将元素推入queue得操作称为push,将元素推出queue得操作称为pop。如下图所示:2、queue的定义deque是双向开口的数据结构,以deque为底部结构并封闭其底部的出口和前端的入口,就能形成queue。以某种既有容器为底部结构,...

2019-10-23 22:38:59 293

原创 STL中的stack

1、stack概述stack是一种先进后出的数据结构。stack不允许有遍历行为,也不提供迭代器,只允许新增元素、移除元素、取得最顶端元素。将元素推入stack的操作称为push,将元素推出stack的操作称为pop,如下图所示。2、stack的定义deque是双向开口的数据结构,以deque为底部结构并封闭其头部端口,能形成一个stack。因此,deque是stack的默认的底部结构。以...

2019-10-23 22:33:19 1195

原创 STL中的heap

1、heap的概念heap(堆)就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列、支持堆排序、快速找出一个集合中的最小值(或者最大值)。(1)heap属性1)堆属性分为两种:最大堆和最小堆。在最大堆中,父节点的值比每一个节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。2)heap没有迭...

2019-10-23 21:46:41 1265

原创 STL中的list

1、list概述list的优点是每次插入或删除一个元素,就配置或释放一个元素空间,对于任何位置的元素插入或元素移除,list永远是常数时间。list迭代器是提供使用者使用list的一种接口。2、list的底层结构list的底层是一个带头结点的双向环状链表,因此在其任意位置进行数据插入和删除操作都非常方便,时间复杂度均为O(1)。其底层结构如下所示:3、list的操作(1)list的迭代...

2019-10-19 20:49:33 542

原创 STL中的vector

1、vector概述vector的数据安排以及操作方式与array非常相似。两者的唯一差别在于空间运用的灵活性。array是静态空间,一旦配置了就不能改变。当要扩大空间时,首先要配置新空间,然后将数据转移,还要释放旧空间。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助。2、vector迭代器...

2019-10-16 23:14:39 577

原创 C++深浅拷贝

1、浅拷贝和深拷贝所谓浅拷贝就是由默认的拷贝构造函数所实现的对数据成员逐一赋值的方式。若类中含有指针类型的数据,这种方式只是简单地把指针指向赋值给新成员,但是并没有给新成员分配内存,因此这种方式必然会导致错误。为了解决浅拷贝出现地错误,必须显示地定义一个拷贝构造函数,使之不但能复制数据成员,而且为对象分配内存空间,这种方式就是深拷贝。2、浅拷贝浅拷贝也称位拷贝,即编译器只是将对象中地值采用基...

2019-08-28 16:04:32 603

原创 C++static成员

1、概念声明为static的类成员称为类的静态成员,用static修饰的成员变量称为静态成员变量,用static修饰的函数称为静态成员函数。2、特性(1)静态成员为所有类对象所共享,不属于某个具体的实例;(2)静态成员变量要在类外定义,定义时不加static关键字;(3)访问静态成员的方式:类名::静态成员;(4)静态成员函数没有隐藏的this指针,不能访问任何非静态成员;(5)静态...

2019-08-23 22:47:50 421

原创 C++友元

友元分为友元函数和友元类。1、友元函数友元函数可以直接访问类的私有成员,它是定义在类外的普通函数,不属于任何类,但是需要在类的内部声明,声明时需要加friend关键字。【例】#include<iostream>#include<stdlib.h>using namespace std; class Date{ //声明友元函数 frien...

2019-08-22 22:56:01 185

原创 C++对象的计算

先看如下代码:#include<iostream>#include<stdlib.h> using namespace std; class Person{public: void SetPersonInfo(const char* name, const char* gender, int age) { strcpy(_na...

2019-08-18 10:42:56 979

原创 C++内联函数

1、概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内敛函数的地方展开代码。因为没有函数压栈的开销,所以内联函数可以提升程序运行的效率。2、特性(1)inline是一种以空间换时间的做法,省去调用函数开销。(2) inline对于编译器而言只是一个建议,编译器会自动优化。如果定义为inline的函数体内有循环、递归,或者代码很长,编译器优化时会忽略掉内联的性质。说明:...

2019-08-14 11:36:02 658

原创 C++多态

1、多态的概念(1)什么是多态?多态指:一个事物有多种形态。多态分为两类:静态多态和动态多态。函数重载和运算符重载都属于静态多态,在程序编译时系统就能决定调用的是哪一个函数。动态多态是在程序运行过程中才确定操作的对象,它是通过虚函数实现的。(2)构成多态的条件1)基类中必须包含虚函数,并且派生类一定要对基类中的虚函数进行重写。2)通过基类对象的指针或者引用调用虚函数。(3)多态的原理...

2019-08-12 11:28:52 165

原创 MySQL中的重要概念

1、什么是数据库事务?事务有什么特点?(1)数据库事务:指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做,要么全不做,是一个不可分割的工作单元。(2)事务的特点:1)原子性;2)一致性;3)隔离性;4)持久性。2、主键和外键的区别(1)主键所在的列的值是唯一的,而且不能为空;(2)外键所在的列可以重复,也可以未空,但是不能创建对应表中不存在的外键值。3、truncate...

2019-07-18 09:44:01 306

原创 MySQL的用户管理

如果每个用户都使用root权限,访问所有的数据库,就存在安全隐患,需要对用户进行管理。例如:李三只能操作test数据库,王五只能操作test1数据库,如果赋予root权限,就可以访问所有的数据库,风险很大。一、用户1、用户信息MySQL中的用户信息,都存储在系统数据库mysql的user表中,如下所示。字段解释:1)host:表示这个用户可以从哪个主机登录,如果是localhost表示...

2019-07-16 11:08:11 187

原创 MySQL中的视图

一、视图的概念1、什么是视图?视图是一条select语句执行后返回的结果集。在创建视图的时候,主要是编写SQL查询语句。2、视图的特性视图相当于一张虚表,是对若干张基本表的引用,是查询语句执行的结果,可以与基本表一样进行增删查改,但是不存储具体的数据,基本表数据发生了改变,视图也会跟着改变。3、视图的作用(1)方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;(2)更加安全...

2019-07-15 11:35:29 218

原创 MySQL的事务

1、事务的必要性事务是一组不可被分割执行的SQL语句的集合,如果有必要,可以撤销。如银行转账,用户A给用户B转账主要分为两部分:第一,账户A的账户金额减去8000;第二步,账户B的账户金额加上8000。这两步要么全成功,要么全不成功,否则会导致数据不一致。这就需要用到事务来保证,如果是不同银行的转账,还会用到分布式事务。2、事务的基本操作以银行转账为例1)创建测试表2)开始一个事务——...

2019-07-14 21:37:15 184

空空如也

空空如也

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

TA关注的人

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