C++primer 阅读随记

2023-11-05

一、C++基础

1. 变量和基本类型

1.1 基本数据类型

在这里插入图片描述
注意:
(1)如果你的数值超过的了int的表示范围,选用long long
(2)char 在一些机器上是有符号的,而在另一些机器上又是无符号的
(3)执行浮点数运算选用double,这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几

类型转换
(1)浮点->整型:截断
(2)赋予无符号类型一个超出其表示范围的值:结果为该值对无符号类型表示数值总数取模后的余数
(3)赋予带符号类型一个超出其表示范围的值:结果为未定义的
(4)当算术表达式中既有无符号数又有int值时,会将int值转换为无符号数
注意:

// 错误:变量u永远也不会小于0,循环条件会一直成立
for (unsigned u = 10; u >= 0; --u) {
	std::out << u << std::endl;
}

字面量常值
定义:指的是直接输入到程序中的值。比如:in myAge=26; myAge是一个int类型变量,而26是一个字面常量。
在这里插入图片描述
注意: 编译器在每个字符串的结尾处添加一个空字符(‘\0’),因此,字符串字面值的实际长度要比它的内容多1。

c++的转义序列汇总:
在这里插入图片描述

1.2 变量

定义: 变量提供一个具名的、可供程序操作的存储空间
基本形式:首先是类型说明符,随后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束

初始化
注意: 初始化不是赋值!
初始化:创建变量时赋予其一个初始值
赋值:把对象的当前值擦除,而以一个新值来代替
四种方式:

int a = 0;
int a = {0};
int a{0};
int a(0);

列表初始化
定义:使用一组由花括号括起来的初始值进行初始化变量

默认初始化
定义变量是没有指定初始值
默认值是由变量类型决定
注意:
(1)定义与任何函数体之外的变量被初始化为0
(2)定义与函数体内部的内置类型变量将不被初始化,其值为未定义。类的对象如果没有显式地初始化,则其值由类确定
(3)未初始化的变量含有一个不确定的值,易出错

变量声明和定义的关系
分离式编译:允许将程序分割为若干个文件,每个文件可被独立编译
将声明和定义区分开
声明:规定变量的类型和名字
定义:负责创建与名字关联的实体,还会申请空间,也可能会为变量赋予一个初始值。
关键字:extern ;不能用于函数体内部

extern int i;	// 声明i而非定义i
int j;			// 声明并定义j
extern double pi = 3.1416; // 定义pi

注: 变量只能被定义一次,但可以被多次声明

标识符
由字母、数字和下划线组成。必须以字母或下划线开头,对大小写敏感
用户自定义的标识符中:
(1)不能连续出现两个下划线
(2)也不能以下划线紧接大写字母开头
(3)定义在函数体外的标识符不能以下划线开头

命名规范
标识符要能体现实际含义
变量名一般用小写
用户自定义的类名一般以大写字母开头
如果标识符由多个单词组成,则单词间应有明显区分,如:student_loan或者studentLoan

名字的作用域
1. 全局作用域
2. 块作用域
3. 嵌套的作用域: 内层作用域、外层作用域

1.3 复合类型

定义:基于其它类型定义的类型。如引用、指针

引用
定义:为对象起了另一个名字。C++11新增”右值引用“,一般”引用“指”左值引用“。
注意:
(1)引用必须初始化;
(2)定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用;
(3)引用不能重新绑定到另一个对象,因此必须初始化;
(4)引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起;

int val = 10;
int &refVal = ival;	// refVal指向val(是val的另一个名字)
int &ref = 10;	// 错误!引用类型的初始值必须是一个对象
double a = 3.14;
int &ref = a;	// 错误!此处的引用类型的初始值必须时一个int型对象

指针
定义:指针是“指向”另外一种类型的复合类型;其本身就是一个对象,允许对指针赋值和拷贝,无须在定义时赋初值;
注意:
(1)如果在一条语句中定义了几个指针变量,每个变量前面都必须有符号*

int *ip1, *ip2;	// ip1和ip2都是指向int型对象的地址
double dp, *dp2;// dp2是指向double型对象的指针,do是double型对象

(2)指针存放某个对象的地址,要想获取该地址,需要使用取地址符&

double dval;
double *pd = &dval;	// 正确,初始值是double型对象的地址
double *pd2 = pd;	// 正确:初始值是指向double对象的指针
int *pi = pd;		// 错误:指针pi的类型和pd的类型不匹配
pi = &dval;			// 错误:试图吧double型对象的地址赋给int型指针

(3)一般要求初始化所有的指针

指针值
四种状态:

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针,意味着指针没有指向任何对象
  • 无效指针,也就是上述情况之外的其他值

利用指针访问对象
利用**解引用符(*)**访问指针所指对象
若对解引用的结果赋值,实际上也就是给指针所指对象赋值
注: 解引用的操作仅适用于那些确实指向了某个对象的有效指针

空指针
生成空指针的方法:

int *p1 = nullptr;
int *p2 = 0;
int *p3 = NULL;

注: NULL为预处理变量,其在头文件cstdlib中定义,其值为0;

赋值和指针
赋值永远改变的是等号左侧的对象
给指针赋值就是令它存放一个新的地址,从而指向一个新的对象

其它指针操作
任何非0指针都为true
两个指针比较是比较其地址
注意: 一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现者两个指针值相同的情况,即指针相等

void* 指针
void* 是一种特殊的指针类型,可用于存放任意对象的地址。但不了解存放的地址中是什么类型的对象
不能直接操作void*指针所指的对象

double obj = 3.14, *pd = &obj;
void *pv = &obj;		// void*能存放任意类型对象的地址
pv = pd;

理解复合类型的声明
虽然基本数据类型只有一个,但声明符的形式却可以不同。如:

// i是一个int型的数,p是一个int型指针,r是一个int型引用
int i = 1024, *p = &i, &r = i;
  • 定义多个变量
    易错点:int *p1, p2; // p1是指向int的指针,p2是int
    (1)把修饰符和变量标识符写在一起
    (2)把修饰符和类型名写在一起,并且每条语句只定义一个变量
  • 指向指针的指针(**表示)
    指针是内存中的对象,向其他对象一样也有自己的地址,因此允许把指针再存放到另一个指针当中
  • 指向指针的引用
    int i = 42;
    int *p;			// p 是一个int型指针 
    int *&r = p;	// r 是一个对指针p的引用
    
    r = &i;			// r 引用了一个指针,因此给r赋值&i就是令p指向i
    *r = 0;			// 解引用r得到i,也就是p指向的对象,将i的值改为0’
    
    注:
    (1)从右往左阅读r的定义
    (2)离变量名最近的符号对变量的类型有最直接的影响
    (3)声明符的其余部分用以确定r引用的类型是什么

1.4 const 限定符

对变量的类型进行限定,使其值不能被改变
const对象必须初始化

初始化和const
const类型的对象只能执行不改变其内容的操作
注意:
(1)可以用非const初始化const,也可以用const初始化非const
(2)默认状态下,const对象仅在文件内有效
(3)默认情况下,const对象被设定为仅在文件内有效
(4)当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量
(5)若只在一个文件中定义const,而在其它多个文件中声明并使用它,则不管在定义还是声明都需要天剑extern关键字

// file_1.cpp定义并初始化了一个常量,该常量能被其它文件访问
extern const int bufSize = fcn();
// file_1.h头文件
extern const int bufSize;	// 与file_1.cpp中定义的bufSize是同一个

const的引用
把引用绑到const对象上,称为对常量的引用(常量引用)。
对常量的引用不能被用作修改它所绑定的对象

const int ci = 1024;
const int &r1;	//正确:引用及其对应的对象都是常量
r1 = 42;		// 错误:r1是对常量的引用
int &r2 = ci;	//	错误:试图让一个非常量引用指向一个常量对象

注意: c++语言并不允许随意改变引用所绑定的对象,所以可以理解为引用都算常量

初始化和对const的引用
(1)在初始化常量引用时允许用任意表达式作为初始值,只需该表达式可以转换为引用类型即可
(2)允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式

int i = 42;
const int &r1 = i;		// 允许将const int&绑定到一个普通int对象上
const int &r2 = 42;		// 正确:r2是一个常量引用
const int &r3 = r1 * 2;	// 正确:r3是一个常量引用
int &r4 = r1 * 2;		// 正确:r4是一个普通的非常量引用

理解内部原理

// 注意此处引用的是临时量
double dval = 3.14;
const int &ri = dval;
// 内部过程
const int temp = dval;	// 由双精度浮点数生成一个临时的整型变量
const int &ri = temp;	// 让ri绑定这个临时量;

注意:
(1)如果ri不是常量引用的时候,按照上述引用会为非法
(2)对const的引用可能引用一个并非const的对象

int i = 42;
int &r1 = i;		// 引用ri绑定对象i
const int &r2 = i;	// r2也绑定对象i,但是不允许通过r2修改i的值
r1 = 0;				// r1并非常量,i的值修改为0
r2 = 0;				// 错误:r2是一个常量引用

指针和const
指向常量的指针不能用于改变其所指对象的值;要想存放常量对象的地址,只能使用指向常量的指针;
注: 指向常量的指针不一定其所指的对象必须是一个常量

const double pi = 3.14;		// pi是个常量,它的值不能改变
double *ptr = &pi;			// 错误:ptr是一个普通指针
const doube *cptr = &pi;	// 正确:cptr可以指向一个双精度常量
*cptr = 42;					// 错误:不能给*cptr赋值

double dval = 3.14;
cptr = &dval;				// 正确:但是不能通过cptr改变dval的值

const指针
指针是对象而引用不是
常量指针必须初始化,其值(存放在指针的地址)就不能再改变

顶层const
顶层const:表示指针本身是个常量;常量指针
底层const:表示指针所指的对象是一个常量;指针常量

int i = 0;
int *const p1 = &i;			// 不能改变p1的值,这是一个顶层const;
const int ci = 42;			// 不能改变ci的值,这是一个顶层const;
const int *p2 = &ci;		// 允许改变p2的值,这是一个底层const;
const int *const p3 = p2;	// 靠右的const是顶层const,靠左的是底层const;
const int &r = ci;			// 用于声明引用的const都是底层const;

注意:
(1)执行拷贝操作时:

  • 顶层const不受影响
  • 底层const,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换

constexpr和常量表达式
常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式

constexpr变量
声明为constexpr类型的变量一定是一个常量

constexpr int mf = 20;			// 20 是常量表达式
constexpr int limit = mf + 1;	// mf + 1是常量表达式
constexpr int sz = size();		// 只有当size()是一个constexpr函数时,才是一条正确的声明语句

注: 若认定变量是一个常量表达式,则应把它声明成constexpr类型

字面值类型
声明为常量表达式的值必须是字面值类型;
包括算术类型、引用和指针;
一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象
注: 函数体内定义的变量一般来说并非存放在固定地址中,

指针和constexpr
注: 在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关;

const int *p = nullptr;		// p是一个指向整型常量的指针
constexpr int *q = nullptr;	// q是一个指向整数的常量指针

1.5 处理类型

类型别名
定义:类型别名是一个名字,它是某种类型的同义词
方式:

  • 利用关键字typedef
    typedef double wages;	// wages是double的同义词
    typedef wages base, *p;	// base是double的同义词,p是double*的同义词
    
  • 使用别名声明;利用using关键字,将等号左侧的名字规定成等号右侧类型的别名
    using SI = Sales_items;	// SI 是Sales_item的同义词
    

指针、常量和类型别名

typedef char *pstring;	
const pstring cstr = 0;	// cstr 是指向char的 常量指针
const pstring *ps;		// ps是一个指针,它的对象是指向char的 常量指针

注意: 不能简单地将pstring替换为char*!!!!
声明中用到pstring时,其基本数据类型是指针,但用了char*重写后,数据类型就变成了char,*成为声明符的一部分。

auto 类型说明符
auto让编译器通过初始值来推算变量的类型
auto也能在一条语句中声明多个变量,但需要求该语句中所有变量的初始基本数据类型都必须一样

auto i = 0, *p = &i;

复合类型、常量和auto
(1)编译器推断出来的auto类型有时候和初始值的类型并不完全一样
(2)auto一般会忽略掉顶层const,同时底层const则会保留下来

const int ci = i, &cr = ci;
auto b = ci;	// b是一个整数(ci的顶层const特性被忽略掉了)
auto c = cr;	// c是一个整数(cr是ci的别名,ci本身是一个顶层const)
auto d = &i;	// d是一个整型指针(整数的地址就是指向整数指针)
auto e = &ci;	// e是一个指向整数常量的指针(对常量对象取地址是一种底层const)

(3)若希望推断出的auto类型是一个顶层const,则需明确指出

const auto f = ci;	// ci的推断类型是int,f是const int;

(4)将引用类型设置为auto

auto &g = ci;
const auto &j = 42;

decltype类型指示符
作用:选择并返回操作数的数据类型;仅得到类型,并不计算表达式的值。

decltype(f()) sum = x;	// sum 的类型就是函数f的返回类型

若decltype使用的表达式是一个变量,则decltype返回该变量的类型(包含顶层const和引用在内)

decltype和引用
如果decltype使用的表达式不是一个变量,则decltype返回表达式结果对应的类型

>// decltype的结果可以是引用类型
int i = 42, *p = &i, &r = i;
decltype(r + 0) b;	// 正确:加法的结果是int,因此b是一个(未初始化的)int
decltype(*p) c;		// 错误:c是int&,必须初始化

注意:
(1)若decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型
(2)如果给变量加上了一层或多层括号,编译器就会把它当成一个表达式
(3)变量是一种可以作为赋值语句左值的特殊表达式,所以这样的decltype就会得到引用类型

// decltype的表达式如果是加上了括号的变量,结果是引用
decltype((i)) d;	// 错误:d是int&,必须初始化
decltype(i) e;		// 正确:e是一个(未初始化的)int

注意: decltype((var))(双层括号)的结果永远是引用,而decltype(var)的结果只有当var本身就是一个引用的时候才是引用

自定义数据结构
以关键字struct开始,紧跟着类名和类体

struct Sales_data {
	std::string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

注意: 要在类定义的最后加上分号,没有初始化的会被默认初始化

编写自己的头文件
为了确保各个文件中类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应与类的名字一样

预处理器概述
定义:确保头文件多次包含仍能安全工作的常用技术
预处理变量有两种状态:已定义和未定义
(1)#define 指令把一个名字设定为预处理变量
(2)检查某个指定的预处理变量是否已经定义:#ifdef 当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真。一旦检查结果为真,则执行后续操作直至遇到#endif指令为止

2. 字符串、向量和数组

3. 表达式

4. 语句

5. 函数

6. 类

二、C++标准库

1. IO库

2. 顺序容器

3. 泛型算法

4. 关联容器

5. 动态内存

三、类设计者的工具

1. 拷贝控制

2. 重载运算与类型转换

3. 面向对象程序设计

4. 模板与泛型编程

四、高级主题

1. 标准库特殊设施

2. 用于大型程序的工具

3. 特殊工具与技术

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++primer 阅读随记 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • getline 之后返回到文件开头

    所以我已经从文件中读取了所有行 while getline ifile line logic 其中 ifile 是 ifstream line 是字符串 我的问题是我现在想再次使用 getline 并且似乎无法返回到文件的开头 因为运行 c
  • C# 异步任务比同步慢

    你知道为什么同步斐波那契方法比异步 等待更快并且比异步任务更快吗 我在每个项目方法上都使用了异步 所以主要是这是一个非常糟糕的方法 Code static int FibonacciSync int number if number 0 r
  • 如何使用c#从数据桶中获取所有文档?

    如何获取数据桶中的所有文档 我尝试过一个示例 但我只能获得一个特定的文档 这是我的代码 CouchbaseClient oclient oclient new CouchbaseClient vwspace data bucket name
  • 我可以将 char 或 DateTime 设置为 null 吗?

    我可以将 null 设置为char数据类型 并且DateTime在 C 中 多谢你们 这是不可能的 它是一个值类型 使用 char myChar null DateTime myDate null 这相当于 Nullable
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/免注册 COM?

    我必须在 C DLL 中使用 VB COM DLL 我弄清楚了如何从 C DLL 访问 VB COM DLL 并且它可以工作 现在我遇到了一个问题 我必须使用隔离的 COM 免注册 COM 因为我无法在必须使用它的每台 PC 上注册 DLL
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • asp.net core http 如果没有内容类型标头,则删除 `FromBody` 忽略

    我在 http 中使用 bodyDELETE要求 我知道目前删除主体是非标准的 但是允许的 使用时出现问题HttpClient它不允许删除请求的正文 我知道我可以使用SendAsync 但我宁愿让我的 API 更加灵活 我希望这个机构是可选
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 意外的 const 引用行为

    include
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐

  • volatile足以保证数据同步吗

    在讨论之前必须先搞清四种存储介质 寄存器 高级缓存 RAM和ROM RAM与ROM大家都比较熟悉了 可以看成是我们经常说的内存与硬盘 寄存器属于处理器里面的一部分 而高级缓存cache是CPU设计者为提高性能引入的一个缓存 也可以说是属于处
  • axios post方式同时传递pram和json参数

    废话不多说 直接上代码 1 单独传递表单参数 后台使用 RequestParam接收 let postData mobile this account password this password loginType 0 let postD
  • 编译原理------语法分析器C/C++代码实现

    一 实验目的 编制一个递归下降分析程序 实现对词法分析程序所提供的单词序列的语法检查和结构分析 二 实验内容 利用C语言编制递归下降分析程序 并对简单语言进行语法分析 2 1 待分析的简单语言的语法 用扩充的BNF表示如下 lt 程序 gt
  • npm nrm安装后报错

    错误信息为 C Users Lenovo AppData Roaming npm node modules nrm cli js 9 const open require open Error ERR REQUIRE ESM require
  • Hadoop学习笔记(六)(Spark + Flink + Beam)

    spark 计算框架 速度 易用 通用性 Mapreduce是进程级别的 Spark是线程级别的 Spark生态系统 DBAS Berkeley Data Analytics Stack Mesos HDFS Tachyon 基于内存的文件
  • LRUCache详解

    1 概念 LRU是Least Recently Used的缩写 意思是最近最少使用 它是一种Cache替换算法 Cache的容量有限 因此当Cache的容量用完后 而又有新的内容需要添加进来时 就需要挑选并舍弃原有的部分内容 从而腾出空间来
  • 【C++类模板详解】——快速入门C++风靡全球的原因

    C 类模板详解 快速入门C 风靡全球的原因 C 是目前全球最为流行 应用范围最为广泛的编程语言之一 其强大的语言特性和灵活的代码设计方式使得它被广泛应用于各种领域 包括操作系统 数据库 游戏 框架等等 而在C 中 类模板是一种非常重要的编程
  • Unity中如何让物体和相机一起动

    Unity中开发VR或者AR应用中我们想要物体和相机跟随着进行移动 我们需要先获得相机的参数 其次我们需要修改物体的参数使得其跟随移动 public class TestCubeStability MonoBehaviour public
  • javascript 优雅实现时间格式化

    有的时候 我们需要一定格式的 时间 比如 2017 05 12 08 48 这样的格式 上代码先 时间格式化 第一种 function formatDate time var date new Date time var year date
  • 在 Silverlight 中管理动态内容交付,第 1 部分

    本文示例源代码或素材下载 目录 Silverlight 应用程序的大小 动态生成的 XAML 动态生成的 XAP 请求内容 缓存下载的内容 下载工具 下载仅含 XAML 的数据 使用 XAP 程序包 处理 XAP 内容 总结 任何使用富 I
  • 双向可控硅控制220v通断电路_什么是双向可控硅,它在交流调压电路中有哪些应用...

    一 导读 目前交流调压多采用双向可控硅 它具有体积小 重量轻 效率高和使用方便等优点 对提高生产效率和降低成本等都有显著效果 但它也具有过载和抗干扰能力差 且在控制大电感负载时会干扰电网和自干扰等缺点 下面来谈谈可控硅在其使用中如何避免上述
  • mysql join底层实现

    两个表join底层实现 5 5 版本之前 MySQL本身只支持一种表间关联方式 就是嵌套循环 Nested Loop Join 如果关联表的数据量很大 则join关联的执行时间会非常长 在5 5以后的版本中 MySQL通过引入BNLJ算法来
  • centos7自定义ssh端口号

    文章目录 一 背景介绍 二 步骤 1 查看本机系统属性 2 查看是否已安装ssh服务 3 修改默认端口 4 重启sshd服务 5 关于防火墙 6 验证登录流程 一 背景介绍 SSH 为 Secure Shell 由 IETF 的网络工作小组
  • 自动表单数据封装到javaBean中

    页面表单数据的自动封装到javaBean中 先定义一个Bean类 package com test public class Bean private String name private Integer sex public Strin
  • 第一章 微服务必备核⼼-快速⼊⻔SpringBoot2.X

    1 SpringBoot2 X和SpringCloud微服务的关系 SpringBoot 是一个快速开发框架 通过用MAVEN依赖的继承方式 帮助我们快速整合第三方常用框架 完全采用注解化 使用注解方式启动SpringMVC 简化XML配置
  • vue3 setup + ts + vite 项目问题解决:Cannot find module ... or its corresponding type declarations.(ts2307)

    昨日我尝试使用vue3 setup ts vite进行vue3项目的实现 遇到此问题 Cannot find module or its corresponding type declarations ts2307 文件报错类型以及ts官方
  • 转载:CCNP学习考试心得

    CCNP学习考试心得 当计算机屏幕上显示 Congralation时 我不禁长出一口气 心中想 终于考完了 我所说的终于考完是指 我终于完成了CCNP考试 四个月的学习 对于某些人来说可能太长了 但是要真正掌握ccnp的内容我感觉四个月还只
  • 手把手教你使用python发送邮件

    前言 发送电子邮件是个很常见的开发需求 平时如果有什么重要的信息怕错过 就可以发个邮件到邮箱来提醒自己 使用 Python 脚本发送邮件并不复杂 不过由于各家邮件的发送机制和安全策略不同 常常会因为一些配置问题造成发送失败 今天我们来举例讲
  • 混合模型简介与高斯混合模型

    高斯混合模型 混合模型概述 In statistics a mixture model is a probabilistic model for representing the presence of subpopulations wit
  • C++primer 阅读随记

    目 录 一 C 基础 1 变量和基本类型 2 字符串 向量和数组 3 表达式 4 语句 5 函数 6 类 二 C 标准库 1 IO库 2 顺序容器 3 泛型算法 4 关联容器 5 动态内存 三 类设计者的工具 1 拷贝控制 2 重载运算与类