- 博客(88)
- 收藏
- 关注
原创 C++进阶5:动态库与静态库--类篇
C++进阶5:动态库与静态库--类篇0.前提(文件内容)(1)test.h(2)test.cpp(3)main.cpp1、静态库的制作与使用1.1 创建(1)编译源文件(2)生成静态库1.2 使用(1)链接静态库(2)测试(3)结果2、动态库的制作2.1 创建(1)编译目标文件(2)生成静态库2.2 使用(1)生成可执行文件(2)测试(3)结果3、动态链接库的制作3.1 创建(1)修改test.h(2)修改test.cpp(3)修改main.cpp(4)编译动态加载库3.2 使用(1)编译主程序(2)测试(
2022-05-17 20:42:45 795
原创 C++进阶4:动态库与静态库--函数篇
前言1、作用(1)分离编译(2)代码重用2、分类分类作用后缀静态库一个或多个.o目标文件归档在一个文件中.a共享库没有main函数的可执行文件.so动态加载库没有main函数的可执行文件,接口复合API.so...
2022-05-17 20:26:19 613
原创 C++进阶3:Makefile入门
0、作用Makefile文件告诉Make怎样编译和连接成一个程序。1、Makefiile基本语法与执行1.1 示例编译一个单文件HelloWorld.cpp(1)编写MakefileHelloWorld : HelloWorld.cpp g++ HelloWorld.cpp -o HelloWorldclean : rm HelloWorld(2)编译make(3)清空make clean1.2 构成Makefile主要由多条规则构成,每条规则由三部分构成:目标(ta
2022-04-19 23:03:05 1923
原创 C++进阶2:重载
函数重载:在相同作用域中的多个函数,具有相同的名字而形参表不同不能仅仅基于不同的返回类型而实现函数重载。返回值是不影响函数签名的。C++函数重载底层实现原理是C++利用name mangling(倾轧)技术,来改名函数名,区分参数不同的同名函数。编译器通过函数名和其参数类型识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(name decora
2022-04-18 21:35:41 219
原创 C++进阶1:xxx_cast类型转换
类型转换隐式类型转换显式类型转换语法xxx_cast <类型> (表达式)1、static_cast用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要有如下:(1)基本数据类型转换(2)int转换成enum(3)基类和子类之间指针和引用的转换上行转换:把子类的指针或引用转换成父类,这种转换是安全的(通常使用默认转换)。下行转换:把父类的指针或引用转换成子类,这种转换是不安全的,也需要程序员来保证(通常使用dynamic_cast)。1.1 基本数据类
2022-04-18 21:30:42 1031
原创 STL8:vector和list的简单实现
1、vector.cpp实现了vector类的基本功能函数,迭代器等。#include <iostream>#include<algorithm>#include <numeric>using namespace std;//迭代器操作就是指针的操作namespace miniSTL{ //miniSTL命名空间template<typename T>class vector{public: typedef T value_t
2022-04-18 09:27:55 240
原创 STL7:迭代器总结
STL7:迭代器总结1、概念2、作用3、迭代器分类4、迭代器操作4.1 访问4.2 移动5、迭代器适配器5.1 插入适配器(1)inserter.cpp(2)front_inserter.cpp(3)back_inserter.cpp5.2 流迭代器适配器(1)输出流迭代器适配器ostreambuf_iterator(2)输入流迭代器适配器istream_iterator(3)逆向迭代器适配器reverse_iterator6、迭代器对比7、练习(1)空白符分割字符串(2)list和vector的对比(3)
2022-04-13 15:00:37 259
原创 STL6:算法总结
STL6:算法总结1、构成2、分类3、填充4、遍历/变换5、最大最小6、排序算法(12个):提供元素排序策略6.1 排序6.2 反转/旋转6.3 随机7、查找算法(13个):判断容器中是否包含某个值7.1 统计7.2 查找7.3 搜索7.4 边界8、删除和替换算法(15个)8.1 复制8.2 移除8.3 替换8.4 去重8.5 交换9、算数算法10、关系算法11、集合算法12、排列组合算法:提供计算给定集合按一定顺序的所有可能排列组合13、堆算法1、构成2、分类3、填充fill()/fill_
2022-04-12 11:44:47 327
原创 STL5:仿函数
STL5:仿函数1、概念2、场景3、使用3.1 C语言的处理方式3.2 C++语言的处理方式(1)函数指针方式(2)函数模板方式(3)仿函数方式(4)仿函数模板方式4、STL的仿函数4.1 算术类仿函数(1)使用实例1(2)使用实例24.2 关系运算类仿函数(1)使用实例4.3 逻辑运算仿函数(1)布尔数组整体取反(2)两个布尔数组对应元素相与1、概念模仿函数的类,使用方式如同函数。本质是类中重载括弧运算符operator()。2、场景不同函数复用相同处理代码。3、使用3.1 C语言的处理方式
2022-04-12 11:11:15 1015
原创 STL4:容器-map
1、简介map是key-value构成的集合2、操作map是键值对<key,value>构据集合。key必须唯一。主要用来查找key对应value,要求key必须是可排序的,必须支持<比较运算符。map默认是以key升序存放键值对<key,value>数据,比较适合二分查找。map内部结构map使用pair<key,value>类模板保存key与value,pair<key,value>有两个public成员变量:first和second,
2022-04-01 09:48:51 299
原创 STL3:容器-set
STL3:容器-set1、简介2、操作2.1 初始化2.2 基本操作(1)迭代器(2)数据量操作2.3 添加数据(1)insert插入数据(2)insert指定位置插入数据2.4 遍历(1)迭代器for循环(2)for_each()循环[推荐](3)C++11auto迭代器写法(4)C++11 for-loop-scope迭代器写法[推荐](5)C++11 for_each()与lamdba表达式2.5 查找(1)count()判断值是否存在(2)find()判断值是否存在以及位置2.6 区域查找2.7 删
2022-03-25 15:48:00 730
原创 STL2:容器总结
STL2:容器总结1、容器简介1.1 顺序容器(序列容器)Sequence Container1.2 关联容器 Associative Container1.3 容器适配器 Container Adapter2、容器通常操作2.1 实例化2.2 重载运算符2.3 迭代器2.4 大小2.5 插入2.6 删除3、容器的特有操作3.1 顺序容器特有函数(1)访问函数(2)赋值/扩展3.2 关联容器特有查找函数3.3 容器适配器特有函数3.4 list特有函数4、其他4.1 字符串4.2 C++11增加容器4.3
2022-03-25 10:44:46 660
原创 STL1:简介
1、背景1.1 STL是什么?STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。1.2 STL与C++标准库的关系1.3 版本2、STL的组成No.Component部件作用1Container容器存储数据2lterator迭代器遍历容器数据3Adaper适配器(配接器)容器转换4Algorithm算法通用算法5Function Obj
2022-03-24 09:20:09 348
原创 C++基础7:模板编程/泛型编程
C++基础7:模板编程/泛型编程1、基本概念1.1 什么是模板?1.2 模板有什么用?1.3 模板编程/泛型编程1.4 模板分类2、函数模板2.1 模板声明2.2 模板定义2.3 例子及模板实例化3、类模板3.1 模板声明3.2 模板定义3.3 模板实例化3.4 模板参数等3.5 实例4、模板参数推导/推演(deduction)5、特化5.1 函数模板特化5.2 类模板特化5.2.1 全特化5.2.2 偏特化6、模板原理7、类模板8、实例:1、基本概念1.1 什么是模板?模板(Template)是允许
2022-03-21 10:37:24 1261
原创 C++基础6:异常
C++基础6:异常1、为什么需要异常:2、C语言如何表示错误1、函数返回值2、全局变量errno3、异常处理特点4、案例5、语法1、抛出异常2、捕获并处理异常3、特点4、复杂一点地写法6、异常的接口声明/异常规范7、那么当异常抛出后新对象如何释放?8、举例1、捕获异常2、异常与局部对象析构9、标准异常类10、exception派生11、逻辑异常logic_error派生12、运行时runtime_error派生13、自定义异常类1、编码流程2、代码结构14、构造函数、析构函数的异常处理15、是否使用异常机制
2022-03-20 21:47:41 981
原创 C++基础5:文件
C++基础5:文件1、流2、流类型2.1 标准I/O流2.2 文件流类型2.3 字符串流类型3、流对象4、流对象状态5、I/O操作5.1 输出流默认配置5.2 格式控制(1)格式控制成员函数(2)预定义格式控制函数(3)流的输出控制格式5.3 对齐方式(1)成员函数方式(2)操作子方式(3)混合方式5.4 整数输出格式(1)成员函数方式(2)操作子方式5.5 浮点数输出格式(1)成员函数方式(2)操作子方式(3)混合方式5.5 布尔类型输出格式5.6 其他(1)成员函数方式(2)操作子方式5.7 注意5.8
2022-03-19 22:01:58 476
原创 C++基础4:多态
多态多态:不同类型对象调同相同接口完成不同的行为根据对象的实际类型不同,可以自动完成不同的行为,而仅仅通过一致的调用形式关系:没有封装就不能继承,没有继承就没有运行时的多态绑定:早绑定/overload晚绑定/override函数和运算符重载继承与虚函数1、覆盖(重写override)与虚函数的使用1.1 覆盖成立的三个条件1、继承2、子类覆盖(重写)父类虚函数3、父类指针/引用指向子类1.2 多态产生的效果同样的调用语句实现不同的表现,框架的基石,设计
2022-03-17 21:04:58 923
原创 C++基础3:继承
C++基础3:继承1、语法(1)原则(2)语法2、成员的访问权限(1)继承访问权限变化(2)子类内部访问父类成员(3)子类对象访问父类成员(4)子类对象访问父类成员访问限定符的变化(5)小结3、继承关系的构造顺序(1)顺序(2)同名隐藏规则4、函数同名的情况总结4.1 练习(1)派生类的对象可以赋值给基类的对象(2)派生类对象的地址赋值给基类的指针变量(3)派生类对象可以初始化基类的引用5、多重继承6、钻石继承/菱形继承6.1 概念6.2 问题16.3 问题26.4 测验7、关于多重继承8、对象构造顺序总结
2022-03-15 14:45:56 971
原创 C++基础2:类与对象
1、认识类与对象1.1 什么是类类(class)是类型(type),是用户自定义的类型。为什么不叫它type,因为借用Simula语言中的class关键字1.2 为什么要有类基于便理性的考虑,现实世界中物(object)通常被分为几种独立的分类。1.3 基本概念概念比喻对象/实例楼房实例化建造类建筑图纸1.4 面向对象四大特征特征说明类比抽象抽出具体事物的普遍性的本质分门别类:鸟类、哺乳类、鱼类封装把数据与处理(函数
2022-03-13 09:39:29 452
原创 C++基础1:从C过渡到C++
C++基础1:从C过渡到C++案例:输出Hello World(1)源代码(2)编译及运行(3)基本区别1、源文件后缀(1)C/C++头文件后缀名的区别(2)C/C++源文件后缀名的区别(3)不同编译器C++源文件后缀名区别2、引用头文件3、函数重载实验:以下C与C++的编译执行结果(1)printf.c(2)printf.cpp4、命名空间4.1 实验:以下C的编译结果4.2 命名空间4.3 命名空间的作用4.4 定义命名空间4.5 引用命名空间4.6 C++命名空间的处理方式4.7 全局命名空间5、类型
2022-02-28 10:25:09 906
原创 基础数据结构和算法6:简单排序算法
基础数据结构和算法6:简单排序算法1、简单练习1.1 测试框架1.2 随即生成数组1.3 c++内置函数排序2、冒泡排序2.1 步骤(1)首先实现一趟冒泡(2)再实现多趟冒泡2.2 参考代码(1) bubble.c(2) util.c(3) util.h2.3 时间复杂度2.4 空间复杂度3、选择排序3.1 步骤(1)最大数字的下标(2)交换3.2 参考代码(1)selection.c(2)util.c(3)util.h3.3 时间复杂度3.4 空间复杂度3.5 优化4、插入排序4.1 步骤(1)实现插入一
2022-02-19 17:53:13 645
原创 基础数据结构和算法3:链表
1、链表是什么顺序表的缺点:(1)添加和删除操作需要移动元素。(2)当数据量特别大的情况,可能没有连续的内存可使用。链表,别名链式存储结构或单链表,用于存储逻辑关系为 “一对一” 的数据。与顺序表不同,链表不限制数据的物理存储状态。顺序表通过连续的地址建立元素之间前后连接关系,链表通过指针方式建立元素之间前后连接关系。2、链表怎么用链表用法与顺序表相似,只是适用场景有所不同。3、链表如何实现3.1 定义结构使用链表存储的数据元素,其物理存储位置是随机的。数据元素随机存储,并通过指针表示数据
2022-02-17 10:58:35 492
原创 基础数据结构和算法2:顺序表
基础数据结构和算法2:顺序表1、线性结构2、顺序表是什么3、顺序表怎么用?4、顺序表怎么实现?4.1 定义结构4.2 定义操作(1)初始化顺序表(2)添加元素(3)获取元素(4)获取元素个数(5)插入元素(6)删除元素(7)销毁顺序表5、优化5.1 容量5.2 创建5.3 随即访问元素5.4 遍历1、线性结构数据结构中最常用最简单的结构是线性结构。线性结构,又称线性表。逻辑结构上数据元素之间存在一个对一个的相邻关系。线性结构是n个数据元素的有序(次序)集合,它有下列几个特征:1.集合中必存在唯一的一
2022-02-16 14:08:11 164
原创 基础数据结构和算法1:简介
基础数据结构和算法1:简介1、数据结构1.1 数据结构是什么?1.2 数据结构有什么用?1.3 数据结构分类2、算法2.1 算法是什么?2.2 算法有什么用?2.3 如何判断算法的好坏?2.3.1 时间复杂度1、时间复杂度是什么?2、如何表示时间复杂度?2.3.2 空间复杂度1、空间复杂度是什么?2、如何表示空间复杂度3、如何计算时间复杂度?3.1 O(1)3.2 O(n)3.3 O(n^2)3.4 O(n^3)3.5 O(log_2n)3.6 O(2^n)3.7 O(n!)4、线性结构5、练习1、未出现的
2022-02-16 10:36:07 282
原创 C语言进阶9:内存
C语言进阶9:内存1、结构体字节对齐1.1 试一试1.2 字节对齐默认原则1.3 练习2、内存四区2.1 测试2.2 栈区(stack)2.3 堆区(heap)2.4 数据区(data)2.5 代码区(code)3、堆和栈的区别4、显示目标文件区段大小:size命令1、结构体字节对齐1.1 试一试#include <stdio.h>struct S1{ char c1; char c2; int n;};struct S2{ char c1;
2022-02-10 22:44:51 726
原创 C语言进阶8:变量分类
1、本地变量/局部变量1.1 遍地变量/局部变量是什么?1.2 本地变量/局部变量有什么特点?1.3 本地变量/局部变量初始化2、全局变量2.1 全局变量是什么?2.2 全局变量有什么特点?2.3 全局变量初始化2.4 同名隐藏3、全局静态变量3.1 全局静态变量是什么?3.2 全局变量与全局静态变量区别4、本地静态变量4.1 静态本地变量是什么?4.2 静态本地变量有什么特点?5. 总结5.1 变量的作用域和生命期6. static关键字小结:7. 7. 最佳实践7.
2022-02-10 20:56:25 878
原创 C语言进阶7:变量作用域与生存期
C语言进阶7:变量作用域与生存期1、作用域1.1 作用域是什么?1.2 作用域怎么用?(1)test1(2)test2(3)test32、生存期2.1 生存期是什么?2.2 生存期怎么用?(1)test1(2)test23、同名隐藏(1)test1(2)test2变量的作用力和生存期相当于变量的"攻击范围"和"生命力"。1、作用域1.1 作用域是什么?在什么范围内可以访问这个变量。1.2 作用域怎么用?(1)test1#include <stdio.h>int main(){
2022-01-18 21:21:58 382
原创 C语言进阶6:二进制操作
1、位运算1.1 按位运算No.操作符功能1&按位与2l按位或3~按位取反4^按位异或1.2 运算规则pqp & qp l qp ^ q000000101111110100111.3 示例1.3.1 按位与让某一位或某些位为0。int n = 0xFFFF;n = n & 0x0010;截取二进制数中的一段值。int n
2022-01-18 21:07:13 2853
原创 C语言进阶5:头文件
C语言进阶5:头文件1、背景2、头文件2.1 头文件是什么?2.2 头文件怎么用?2.3 头文件怎么写?2.3.1 声明(1)常见的声明(2)重复声明(3)定义与声明2.3.2 标准头文件结构(1)误区:3、示例(1)student.c(2)student.h(3)student_operation.c(4)student_operation.h(5)main.c1、背景编写小的程序可以把代码写在一个文件中,当编写大程序中,需要把代码分在多个文件中。(1)多个源代码文件(2) main()里面代码太
2022-01-17 15:30:09 504
原创 C语言进阶4:宏定义
C语言进阶4:宏定义1、宏定义是什么?2、宏定义怎么用?2.1 宏定义常量2.1.1 预定义宏2.1.2 自定义宏(1)语法(2)示例(3)说明2.2 带参数的宏(1)语法(2)示例(3)说明(4)练习2.3 编译预处理3、宏展开4、编译预处理指令1、宏定义是什么?宏是用来表示一段代码的标识符。宏也是标识符,也要满足标识符的规则。但通常习惯使用大写字母和下划线命名。2、宏定义怎么用?宏定义通常有三种用法:(1)当作常量使用。(2)当作函数使用。(3)编译预处理。2.1 宏定义常量2.1.
2022-01-17 10:12:51 689
原创 C语言进阶3:二维指针
C进阶3:二维指针1、什么是二维指针?1.1 示例11.2 示例22、二维指针怎么用2.1 二维指针作为函数参数2.1.1 传入一位指针地址(1)可以取出单个变量(2)可以取出一个数组2.1.2 传入指针数组地址2.2 二维指针作为函数返回值(1)示例1、什么是二维指针?二维指针与一维指针一样都是保存地址的变量。1.1 示例1#include <stdio.h>int main(){ int n=0,m=0; printf("&n=%p\n",&n);
2022-01-17 09:37:23 867
原创 C语言进阶2:动态分配内存
C语言进阶2:动态分配内存1、动态分配内存是什么?2、动态分配内存怎么用?2.1 申请动态分配内存malloc()2.2 释放动态分配内存free()2.2.1 free()的坑2.2.2 指针悬空==野指针2.3 初始化动态分配内存2.3.1 试一试,申请的动态内存内的值是多少?2.3.2 内存初始化为02.4 重新调整内存的大小2.5 内存分配函数小结2.6 标准库中相关函数1、动态分配内存是什么?是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。通常我们的变量都是预先分配的,系统自
2022-01-16 20:38:46 125
原创 C语言进阶1:文件操作
C语言进阶1:文件操作1、文件输入和操作1.1 Hello.c1.2 编译1.3 执行2、文件打开关闭:fopen()和fclose()2.1 打开文件:fopen()2.1.1 函数原型2.1.2 参数2.1.3 打开的基本方式2.1.4 打开组合方式2.1.5 返回值2.2 关闭文件:fclose()2.2.1 函数原型2.2.2 参数和返回值2.3 基本框架3、文本读写:fprintf()和fscanf()3.1 函数原型3.2 举例(1)将数据写入文件(2)从文件中读出数据(3)给文件写和从文件读(
2022-01-07 21:39:50 759
原创 C语言初阶10:typedef
C语言初阶10:typedef1、类型重命名是什么?2、类型重命名怎么用?2.1 基本类型重命名2.1.1 语法2.1.2 示例2.2 结构体/联合体类型重命名2.2.1 语法2.2.2 示例2.2.3 练习2.3 函数指针类型重命名2.3.1 语法2.3.2 示例3、类型重命名有什么用?1、类型重命名是什么?给一个已有的数据类型声明一个新名字。新名字是数据类型的别名。2、类型重命名怎么用?2.1 基本类型重命名类型重命名用法与变量定义相似,只是在前面加上typedef。2.1.1 语法typ
2022-01-06 17:22:04 278
原创 C语言初阶9:枚举
C语言初阶9:枚举1、常量符号化1.1 const1.2 #define1.3 const与#define1.3.1 区别1.3.2 作用域2、枚举2.1 枚举是什么?2.2 枚举怎么用?1、常量符号化程序中的数字有时含义不明,被称为魔术数字。通常使用符号来表示。常用的方式有解决这种问题1.1 constconst double PI = 3.1415926;// 星期const int SUM = 0;const int MON = 1;const int TUES = 2;con
2022-01-06 16:47:13 104
原创 C语言初阶8:联合体
C语言初阶8:联合体1、语法1.1 例子2、示例3、如何判断一个系统是大端还是小端?4、联合体综合1、语法union 联合体类型名 { 成员};用法与struct一样。不同点是所有成员公用相同的内存空间。联合体的sizeof是成员中大小最大的值。联合体是成员共用内存空间。1.1 例子#include <stdio.h>#include <math.h>union Test{ int n; double b;};int main(){
2022-01-06 12:33:24 238
原创 C语言初阶7:结构体
C语言初阶7:结构体1、结构体操作1.1 取地址1.2 传参2、结构体指针2.1 结构体指针访问成员2.2 结构体指针作为参数3、结构体数组4、结构体嵌套4.1 结构体含有结构体数组5、使用结构体5.1 获取当前时间5.2 两个常用的时间函数6、结构体的实验7、时间处理的实验1、结构体操作1.1 取地址#include <stdio.h>struct Point3D{ int x; int y; int z;};int main(){ struct
2022-01-06 12:04:22 2622
原创 C语言初阶6:函数
C语言初阶6:函数1. 函数原型1.1 函数原型是什么?1.2 函数原型怎么用?1.3 函数原型有什么用?1.4 函数前置声明试一试2. 指针与函数2.1 函数名2.2 函数指针赋值调用测试结果变量与函数(1)测试(2)数组元素的和积差商的函数(3)函数qsort()实现数组的排序(a)困难,整形(b)简单,浮点型(c)字符型排序2.3 指针函数2.4 函数名与数组名1. 函数原型1.1 函数原型是什么?函数头以;结尾,构成函数原型。1.2 函数原型怎么用?函数原型通常放在头文件里面或者调用它的函
2022-01-04 12:31:00 349
原创 C语言初阶5:指针
1、指针运算1.1 算术运算1.1.1 加减+指针与整数相加:表示指针指向下个变量。指针与整数相减:表示指针指向上个变量。指针与指针相减:两个指针的元素间隔个数。(1)实验#include <stdio.h> int main(){ int arr[]={100,101,102,103,104,105}; int *p=arr; int *q; for(int i=0;i<5;i++){ q=p+i; pr
2022-01-04 10:43:13 475
原创 Apache的管理及优化web
一、Apache的作用在web被访问时通常使用http://的方式http:// ##超文本传输协议http:// 超文本传输协议提供软件:ApachenginxstgwjfeTengine实验一:dnf install httpd.x86_64 -yfirewall-cmd --permanent --add-service=http ##在火墙中永久开启http访问firewall-cmd --permanent --add-service=https ##在火墙中永久开启h
2022-01-03 10:20:18 531
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人