User information
Log in
Discover
Follow
Create
高贵的衬衫 Profile - Yetu - A Global Platform for Content Sharing and Monetization
高贵的衬衫
Community Age:0.8 year
Posts
6
Followers
2
Honor
1
Follow
Message
Joined
小沈技术交流
7 Members
Join
Posts
(6)
Comments
(0)
Save
Friends
Following
Followers
高贵的衬衫
07-31 22:01
小沈技术交流
C++
# 一、STL简介 ## 1.1 什么是STL STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架 ## 1.2 STL的六大组件  # 二、vector的介绍及使用 ## 2.1 vector的介绍 [vector的文档介绍](https://legacy.cplusplus.com/reference/vector/vector/) - **vector是表示可变大小数组的序列容器**。 - 就像数组一样,**vector也采用**的**连续存储空间来存储元素**。也就是意味着可以采用下标对**vector**的元素进行访问,和数组一样高效。但是又不像数组,**它的大小是可以动态改变的**,而且**它的大小会被容器自动处理**。 - 本质讲,**vector使用动态分配数组来存储它的元素**。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。 - **vector分配空间策略**:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。 - 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。 - **与其它动态序列容器相比**(deque, list and forward_list), **vector在访问元素的时候更加高效**,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。 ## 2.2 vector的使用 ### 2.2.1 vector的定义 |(
高贵的衬衫
07-30 15:30
小沈技术交流
C++
# 一、面向过程和面向对象初步认识 >C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。  >C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。  # 二、类的引用 >**C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。** >==比如==:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在**以C++方式实现,会发现struct中也可以定义函数** ```mermaid flowchart LR id1><font color=#FFF0</font>C语言版] ``` >结构体中只能定义变量,并且声明栈类型的变量时,必须写全struct Stack。 ```c typedef int DataType; struct Stack { DataType* _array; size_t _capacity; size_t _size; }; struct Stack s;//声明一个结构体变量 ``` ```mermaid flowchart LR id1><font color=#FFF0</font>C++版] ``` >C++中,struct结构体升级成了类,它里面不仅可定义变量,还可以定义函数,并且声明栈类型变量的时候,可以不加struct。声明的变量可以通过.去调用类里面的函数。 ```cpp #include<iostream> using namespace std; //C++兼容C语言,结构用法可以继续使用 //同时struct也升级成了类 struct Stack { //成员函数 void Init() { a = nullptr; top = capacity = 0; } void Push
高贵的衬衫
07-30 15:29
小沈技术交流
C++
# 一、内联函数 ```mermaid flowchart LR id1[(<font color=#</font>内联函数)] ``` ## 1.1.面试题 ```mermaid flowchart LR id1[(<font color=#</font>面试题)] ``` >通过对C语言的学习,对于宏有了一定的了解,当定义一个宏常量是是非常方便的直接替换这在数据结构链表处有明显的体现,但是对于宏函数的写法就==比较容易出错有以下几种形式的错误需要提醒==: ```cpp #define N 10//宏常量 //宏函数 #define ADD(int x , int y) {return x+y;}//宏的调用不需要return #define ADD(x , y) (return x+y;) #define ADD(x , y) return x+y; #define ADD(x , y) x+y;//宏后面不需要分号 //加分号是可以的但对于有些语法是不通过的 int main() { ADD(1, 2);//这种是不会报错的 printf("%d\n", ADD(1, 2));//这种会报错因为宏替换后,会多出一个分号 return 0; } #define ADD(x , y) x+y//可能出现优先级错误 int main() { ADD(1, 2); printf("%d\n", ADD(1, 2)); printf("%d\n", ADD(1, 2) * 3);//这里替换后变成了1+2*3=7显然不是想要得到的9 return 0; } #define ADD(x , y) (x+y)//可能出现优先级错误 int main() { ADD(1, 2); printf("%d\n", ADD(1, 2)); printf("%d\n", ADD(1, 2) * 3); int a = 1, b = 2; ADD(a | b, a & b);//替换后变成(a|b+a&b) +号的优先级高于| &所以会先算+ return 0; } #define ADD(x , y) ((x)+(y)) 这是正确的 ``` ```mermaid flowchart LR id1><font
高贵的衬衫
07-30 15:28
小沈技术交流
C++
# 一、函数重载 ```mermaid flowchart LR id1[(<font color=#</font>函数重载)] ``` >自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词真实的含义,即该词被重载了。 比如:以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“谁也赢不了!”,后者是“谁也赢不了!" ## 1.1.函数重载概念 ***==函数重载==***:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题 ```mermaid flowchart LR id1><font color=#FFF0</font>1. 参数类型不同] ``` ```cpp #include<iostream> using namespace std; int Add(int left, int right) { cout << "int Add(int left, int right)" << endl; return left + right; } double Add(double left, double right) { cout << "double Add(double left, double right)" << endl; return left + right; } int main() { cout << Add(1, 2) << endl; cout << Add(1.1, 2.2) << endl; return 0; } ``` ```mermaid flowchart TD id1[\<font color=#FFD700</font>类型不同:一个整形一个浮点型但是函数名相同C++会自动匹配类型C却不能\] ``` ```mermaid flowchart LR id1><font color=#FFF0</font>2. 参数个数不同] ``` ```cpp #include<iostream> using namespace std; void f() { cout << "f()"
高贵的衬衫
07-30 15:26
小沈技术交流
C++
# 一、C++历史介绍 ```mermaid flowchart LR id1[(<font color=#</font>C++历史介绍)] ``` C语言最初由 Dennis Ritchie 于 1969 年到 1973 年在 AT&T 贝尔实验室里开发出来,主要用于重新实现 Unix 操作系统。此时,C语言又被称为 K&R C。其中,K 表示 Kernighan 的首字母,而 R 则是 Ritchie 的首字母。 C语言一般分为GUN C 、ANSI C、标准C,在了解这几个术语对应的C标准之前,我们需要先了解三个组织,分别是自由软件基金会,美国国家标准学会以及国际标准化组织。下面对其三个组织进行简单说明: - 自由软件基金会:是美国的一个民间非营利组织,致力于推进自由软件,其中linux与gnu就是由这个组织在维护。 - 美国国家标准学会:听名字就知道这是美国用于制定自己国家标准各类标准的组织(政府组织) - 国际标准化组织:作用同美国国家标准协会相似,只是这个组织的目标更远大一些,致力于制定国际标准。 其中GNU C 是软件自由基金会制定的标准,ANSI C 是由美国国家标准学会制定的标准,而ISO C则是由国际标准化组织制定的标准,当前是一个国际化的时代,都在追求标准,那么这个标准化肯定不能是某一个国家的标准,那么这个标准肯定要有国际标准化组织来制定,所以我们常说的标准C其实就是ISO C,下面统称为标准C。 大约在90年代,美国国家标准学会与国际标准化组织相互接纳吸收对方的标准,所以当前标准C 与ANSI C的标准其实是一样的。GNU C 主要应用于linux开发,比标准C支持更多的特性,使用起来更加灵活,所以 标准C = ISO C = ANSI C ≠ GNU 。 # 二、命名空间 ## 2.1.C与C++对比 ```mermaid flowchart LR id1[(<font color=#</font>C与C++对比)] ``` ```mermaid flowchart LR id1><font color=#FFF0</font>首先回顾一下C语言中第一次敲过的代码hello world] ``` ```c #include<stdio.h> int main() { printf(
高贵的衬衫
07-18 10:37
小沈技术交流
Docker
# 一、Docker工具 >Docker 是一个开放源代码的容器化平台,它使开发者能够打包、分发和运行应用程序及其依赖项。Docker 工具主要由以下几个组件构成: - Docker 引擎(Docker Engine):Docker 引擎是 Docker 的核心组件,负责构建和运行容器。它使用容器镜像来创建容器,提供了一套 API 和命令行接口,允许用户管理容器的生命周期、网络和存储等方面的配置。 - Docker 镜像(Docker Images):Docker 镜像是用于创建 Docker 容器的只读模板。镜像包含了运行应用程序所需的一切,包括操作系统、应用程序代码、运行时环境、库文件等。用户可以从现有的镜像构建新的镜像,也可以通过 Dockerfile 定义自己的镜像。 - Docker 容器(Docker Containers):Docker 容器是 Docker 镜像的实例化对象,是一个独立运行的应用程序环境。容器可以被创建、启动、停止、删除等操作,它隔离了应用程序及其依赖项,使其可以在不同的环境中以一致的方式运行。 - Docker 仓库(Docker Hub):Docker 仓库是一个集中存储和分享 Docker 镜像的平台。Docker Hub 是公共的 Docker 仓库,用户可以从中获取现有的镜像,也可以将自己构建的镜像上传到仓库分享给他人。  # 二、Docker 引擎 >Docker 引擎(Docker Engine)是 Docker 的核心组件,负责构建和运行容器。它是一个轻量级的容器运行时环境,提供了一套 API 和命令行接口,用于管理容器的生命周期、网络和存储等配置。 Docker 引擎使用了一种称为 Linux 容器(Linux Containers,LXC)的技术来实现容器化。它利用 Linux 内核的功能,如命名空间(namespace)和控制组(cgroup),来隔离容器的进程、文件系统、网络和资源使用。 ```mermaid flowchart LR id1[[<font color=#FFD700</font>Docker 引擎