自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 计算机网络基础概论

网络基本概念 网络 网络是由若干结点和连接这些结点的链路组成,网络中的结点可以是计算机,交换机、路由器等设备。 网络设备有:交换机、路由器、集线器 传输介质有:双绞线、同轴电缆、光纤 下图是一个简单的网络示意图: 互联网 把多个网络连接起来就构成了互联网。目前最大的互联网就是我们常说的因特网。 IP 地址 IP 地址就是给因特网上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的标识符。IP 地址因其特殊的结构使我们可以在因特网上很方便地进行寻址。 IP 地址有分 IPV4 和 IPV6

2021-08-10 18:54:16 292

原创 Linux 线程的创建与同步

线程的概念与实现方式 线程的概念: 线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。 线程的实现方式 在操作系统中,线程的实现有以下三种方式: 内核级线程 用户级线程 组合级线程 Linux 中线程的实现: Linux 实现线程的机制非常独特。从内核的角度来说,它并没有线程这个概念。Linux 把所有的线程都当做进程来实现。内核并没有准备特别的调度算法或是定义特别的数据结构来表征线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一隶属于自己的 task_s

2021-08-09 19:13:01 188

原创 进程间通信

管道 管道可以用来在两个进程之间传递数据,如: ps -ef | grep “bash”, 其中‘|’就是管道。 其作用就是将 ps 命令的结果写入管道文件,然后 grep 再从管道文件中读出该数据进行过滤。 1. 有名管道 有名管道可以在任意两个进程之间通信 有名管道的创建: 命令创建: mkfifo FIFO 系统调用创建 #include <sys/types.h> #include <sys/stat.h> //filename 是管道名 mode 是创建的文件访

2021-08-07 18:28:38 191

原创 Linux 信号的使用

信号的基本概念 信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。 与信号有关的系统调用在“signal.h”头文件中有声明 常见信号的值,及对应的功能说明: 信号的值在系统源码中的定义如下: #define SIGHUP 1 #define SIGINT 2 //键盘按下 Ctrl+c 时,会产生该信号 #define SIGQUIT 3 #define SIGILL 4 #define SIGTRAP 5 #define SIGABRT 6 #define SIGIOT 6 #def

2021-08-03 18:15:21 177

原创 Linux 进程复制与替换

printf 函数输出问题 printf 函数并不会直接将数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满足,才会输出到屏幕。 缓冲区满 强制刷新缓冲区 fflush 程序结束时 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char* argv[],char* envp[]) { printf("hello"); //fflush(stdo

2021-08-03 18:07:24 200

原创 计算机基础概论

计算机的基本组成 计算机组成五大部件 运算器 :也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻 辑运算,移位,比较等。 控制器 :它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。 存储器 :存储程序和各种数据。 输入设备 :把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信 息存储起来。 输出设备 : 把计算机机能识别的信息转换为人能识别的信息,进行呈现。 一台计算机可以抽象成下图: CPU 中包含控制器

2021-08-03 17:02:20 184

原创 Linux 系统上的库文件生成与使用

什么是库文件 库是一组预先编译好的方法(函数)的集合。。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在/usr/include 下或其子目录下。 库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so 静态库的生成与使用 静态库的生成: 第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件 第二步:使用 ar 命令将第一步编译的所有”.o

2021-08-03 16:31:05 164

原创 Linux 系统上 C 程序的编译与调试

gcc 分步编译链接 预编译 : gcc -E main.c -o main.i 编译:gcc -S main.i -o main.s 汇编:gcc -c main.s -o main.o 链接:gcc main.o -o main 两步: gcc -c main.c -->main.o gcc -o main main.o -->main 一步: gcc -o main main.c -->main 编译链接过程 makefile和make 管理工程实现自动化编译 (和

2021-07-31 22:02:49 242

原创 Linux 常用命令

基础命令 pwd -->显示当前位置的绝对路径 cd -->切换目录,cd 后的参数表示要切换到的位置,可以使用绝对路径或相对路径 ls -->显示目录中的文件 man -->帮助手册,用来查看命令、系统调用,库函数等帮助信息 touch -->创建普通文件 mkdir -->创建目录文件 rmdir -->删除空目录,不能删除非空目录, 非空目录需要使用“rm -r name”删除 cp -->拷贝文件, 拷贝目录文件时,需要加上“-r” mv

2021-07-31 21:53:00 105

原创 Linux 系统文件类型与文件权限

文件类型 普通文件 ‘-’ 目录文件 ‘d’ 管道文件 ‘p’ 链接文件 ‘l’ 设备文件(块设备 ’b’ 、字符设备 ‘c’) 套接字文件 ‘s’ 文件权限 r 读权限 值: 4 w 写权限 值: 2 x 执行权限 值: 1 无权限 值: 0 u : 表示文件属主的访问权限 g : 表示文件同组用户的访问权限 o : 表示其他用户的访问权限 修改文件权限 chmod u 表属主 g 同组人 o 其他人 a 所有人 “+”表示增加权限 “-”表示去掉权限 [ student@localhost ~]

2021-07-31 21:35:50 110

原创 多态的基本原理和使用

多态的概念、定义以及实现 多种形态,当不同的对象去执行同一种行为时,产生的不同表现形态 构成多态三个条件(同时满足,缺一不可):在不同的继承关系的类对象,去调用同一函数,产生了不同的行为 必须在继承的框架下实现(前提是继承) 必须通过基类的指针或者引用调用虚函数,即都为切片行为 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写 虚函数的重写:重写函数逻辑 构成虚函数的重写条件:子类含有和父类借口完全相同的函数–>返回值,函数名,参数完全相同(例外:协变,析构函数重写) 不满足条件但

2021-07-19 21:44:16 897

原创 什么是继承

继承概念 类级别的代码复用 继承方式:public、protected、private protectde访问权限/private访问权限: protected —> 在当前类和子类中可见,在其他地方不可见 private —> 在当前类中可见,在其他地方不可见 父类成员在子类中的访问权限:min { 成员在父类中的原始访问权限,继承方式 } 一般都是public继承,protected/private继承很少使用/几乎不用 默认继承方式: cla

2021-07-18 20:50:48 112

原创 栈、队列、优先队列和容器适配器

stack的基本使用 #include<stack> stack<int> st; st.push(1); st.push(2); st.push(3); while(!st.empty()) { cout << st.top() << " "; st.pop(); } cout << endl; queue的基本使用 #include<queue> queue<int> q; q.push(); while(!q

2021-07-14 23:29:02 130

原创 list的基本使用

list的基本使用 list本质为双向带头循环列表 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向带头循环链表,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list

2021-07-14 18:38:21 447

原创 vector的基本使用和实现

vector的基本使用 vector<int> v; vector<char> v2; vector<string> v3; vector<int> v4(10, 5);//10个5 string s2 = "0123456789"; vector<char> v5(s2.begin(), s2.end()); vector<char> v6(v5); vector的遍历 string s = "0123456789"; vec

2021-07-14 13:40:29 220

原创 string类的基本使用及常用接口

string类基本使用 #include <string> void test() { string str;//"" string str2("123");//"123" string str3 = "abc";//"abc" string str4("0123456789", 5);//"01234" string cpy(str3);//"abc" string str5(str4, 2, 2);//"23" 从str4的第2个位置拿两个字符创建一个字符串

2021-07-02 22:05:40 214

原创 C++模板

泛型编程 编写与类型无关的通用代码。 template <typename / class 泛型参数1, typename / class 泛型参数2 ...... > 告诉编译器一个模板,让编译器根据不同的类型利用该模板生成代码 模板实例化:用实际参数类型,生成可执行的函数。 泛型编程并没有减少实际的代码量,只是把重复的代码交给机器自动生成。 减少开发人员的重复工作量,提高工作效率,增加幸福感。 函数模版 template <class T> void Swap(T& l

2021-07-02 21:41:37 134

原创 c++中的内存管理

C/C++内存分布 栈:非静态局部变量,函数参数,返回值等,栈是向下增长的 内存映射段:装载一个共享的动态内存库 堆:用于程序运行时动态内存分配,可以向上增长 数据段:存储全局变量和静态数据 代码段:可执行的代码、只读常量 C语言中内存管理方式 malloc:只进行空间申请,不进行初始化。 calloc:进行空间申请+零初始化。 realloc:第一个参数为nullptr/NULL,功能等价于malloc。 int* ptr=(int*)realloc(nullptr, sizeoff(int));

2021-07-02 12:10:03 177

原创 C++ static、友元、内部类

再谈构造函数 初始化列表:成员(初始化值/表达式),成员2()… 每一个初始化变量只能在初始化列表中出现一次。 对象的成员变量定义的地方:初始化列表。 如果有引用成员,const成员,没有默认构造函数的自定义成员,必须在初始化列表中进行初始化。 其他成员可以不进行显示初始化。 class Time { public: Time(int a) { _a = a; } private: int _a; }; class Date { public: Date(int y = 1, i

2021-06-29 17:32:24 176

原创 C++六大成员函数

类的 6 个默认成员函数 初始化和清理: 构造函数主要完成初始化工作 析构函数主要完成清理工作 拷贝复制: 拷贝构造是使用同类对象初始化创建对象 复制重载主要是把一个对象赋值给另一个对象 取地址重载: 主要是普通对象和const对象取地址,这两个很少会自己实现 构造函数 构造函数:函数名和类名相同,无返回值,可重载,编译器在创建时自动调动 在已经存在的空间上进行一个成员的初始化,并且初始化是自动进行的,当我们创建一个对象的时候编译器自动调用构造函数。 声明一个函数,不会调用无参构造 默认构造(只能存

2021-06-27 20:29:01 869

原创 c++类与对象与this指针

类的定义 c++struct:可以定义数据和函数,一般使用class。 c++定义类的方式 struct Student { void display() { } void setId(int id) { _id = id } char name[10]; int _id; }; class Student {//成员函数 public://共有成员在任何地方可用 void display() { } void setId(int id) {

2021-06-23 20:32:49 151

原创 C++基础

命名空间 对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的`namespacs dog//命名空间为dog { void print(int a) { printf(" %d \n", a); } int a; int b;//可定义变量,也可定义函数 namespace big_dog//可以嵌套 { void fun1(int a) { printf("%d\n", a); int a; int b; } } }在这里插入代码片` ...

2021-06-23 00:53:19 135

原创 关于如何通过Swap函数交换两个变量的值

数据交换在C语言中十分常见。作为初学者首先学的应该都是如下方式: int main() { int a = 10; int b = 20; int tmp = a; a = b; b = tmp; printf("%d,%d\n",a,b); return 0; } 这种交换如果放在一个函数中没错,但如果将它们分别放在子函数和主函数中就会发生错误。 错误示例1: void Swap(int a,int b) { int tmp = a; a = b; b = tmp; } i

2020-10-17 20:10:10 7764

原创 给出一个不多于5位的正整数,要求:1.求出他是几位数;2.分别输出每一位数字;3.按逆序输出各位数字 例:原数为321,则输出为123

1.求出他是几位数。 用12345举例子,这是个五位数。从他的个位数开始数,去掉一个,位数加一。12345就是丢掉五位,所以是五位数字。所以利用循环就可以解决。 具体代码为: while(n!=0)//当n不为0时,执行这个循环 { n/=10;//去位数 count++; } 现在的问题是如何去掉位数。可以用n/=10来解决。12345/10—1234.5因为是整除所以为1234(整数除以整数是整数)。 在定义一个计数器count,去一位就...

2020-10-14 00:30:54 6888 2

空空如也

空空如也

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

TA关注的人

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