C++ Primer Plus 第6版 读书笔记(4) 第4章 复合类型

news2024/11/26 18:19:03

目录

4.1 数组  

4.2 字符串

 4.3 string 类简介

4.3.4 string 类 I/O

4.4结构简介

4.5 共用体  

4.6 枚举  

4.7 指针和自由存储空间  

4.8 指针、数组和指针算术

4.8.1 程序说明

4.8.2指针小结

4.8.5 自动存储、静态存储和动态存储 

 4.9 类型组合

4.10 数组的替代品  

4.11 总结  

练习题 

 

C++是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了 C++的基本概念和技术,并专辟一章介绍了C++11新增的功能。

《C++ Primer Plus(第6版)中文版》分18章,分别介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C++11新增功能等内容。

《C++ Primer Plus(第6版)中文版》针对C++初学者,从C语言基础知识开始介绍,然后在此基础上详细阐述C++新增的特性,因此不要求读者有C语言方面的背景知识。《C++ Primer Plus(第6版)中文版》可作为高等院校教授C++课程的教材,也可供初学者自学C++时使用。

本章内容包括:
 
创建和使用数组。
 
创建和使用 C-风格字符串。
 
创建和使用 string 类字符串。
 
使用方法 getline( )和 get( )读取字符串。
 
混合输入字符串和数字。
 
创建和使用结构。
 
创建和使用共用体。
 
创建和使用枚举。
 
创建和使用指针。
 
使用 new 和 delete 管理动态内存。
 
创建动态数组。
 
创建动态结构。
 
自动存储、静态存储和动态存储。
 
vector 和 array 类简介。

4.1 数组  

数组(array)是一种数据格式,能够存储多个同类型的值。例如,数组可以存储 60 个 int 类型的值(这些值表示游戏 5 年来的销售量)、12 个 short 值(这些值表示每个月的天数)或 365 个 float 值(这些值指出一年中每天在食物方面的开销)。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素。
 
 
要创建数组,可使用声明语句。数组声明应指出以下三点:
  1. 存储在每个元素中的值的类型;
  2. 数组名;
  3. 数组中的元素数。

 

数组的初始化规则:

 

C++有几条关于初始化数组的规则,它们限制了初始化的时刻,决定了数组的元素数目与初始化器中值的数目不相同时将发生的情况。我们来看看这些规则。只有在定义数组时才能使用初始化,此后就不能使用了,也不能将一个数组赋给另一个数组:
 
然而,可以使用下标分别给数组中的元素赋值。
 
 
C++标准模板库(STL)提供了一种数组替代品—模板类 vector,而 C++11 新增了模板类 array。
这些替代品比内置复合类型数组更复杂、更灵活,本章将简要地讨论它们,而第 16 章将更详细地讨论它们。
 
 
 
 

4.2 字符串

    字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种来自 C
语言,常被称为 C-风格字符串(C-style string)。本章将首先介绍它,然后介绍另一种基于 string 类库的方法。
 
 
   存储在连续字节中的一系列字符意味着可以将字符串存储在 char 数组中,其中每个字符都位于自己的数组元素中。字符串提供了一种存储文本信息的便捷方式,如提供给用户的消息(“请告诉我您的瑞士银行账号”)或来自用户的响应(“您肯定在开玩笑”)。C-风格字符串具有一种特殊的性质:以空字符(null character)结尾,空字符被写作\0,其 ASCII 码为 0,用来标记字符串的结尾。
 
f00045a5ff6c4654a649cfeb469f4889.png

 4.3 string 类简介

 c652d59d88c0421580c0364e1c05737d.png

026e75dd04d44af3a2236de59db2981b.png 

 

    使用 string 类时,某些操作比使用数组时更简单。例如,不能将一个数组赋给另一个数组,但可以将 一个 string 对象赋给另一个 string 对象:
b0be355b0bbb4e2198fa3800e023a505.png

 

     函数 strlen( )是一个常规函数,它接受一个 C-风格字符串作为参数,并返回该字符串包含的字符数。函数 size( ) 的功能基本上与此相同,但句法不同:str1 不是被用作函数参数,而是位于函数名之前,它们之间用句点连接。与第 3 章介绍的 put( )方法相同,这种句法表明,str1 是一个对象,而 size( )是一个类方法。方法是一个函数,只能通过其所属类的对象进行调用。在这里,str1 是一个string 对象,而 size( )是 string 类的一个方法。总之,C 函数使用 参数来指出要使用哪个字符串,而 C++ string 类对象使用对象名和句点运算符来指出要使用哪个字符串。
 

 

4.3.4 string 类 I/O

c4cdf0437a5048ca96c797749529c179.png

 

    在用户输入之前,该程序指出数组 charr 中的字符串长度为 27,这比该数组的长度要大。这里要两点需要说明。首先,为初始化的数组的内容是未定义的;其次,函数 strlen( )从数组的第一个元素开始计算字节数,直到遇到空字符。在这个例子中,在数组末尾的几个字节后才遇到空字符。对于未被初始化的数据,第一个空字符的出现位置是随机的,因此您在运行该程序时,得到的数组长度很可能与此不同。另外,用户输入之前,str 中的字符串长度为 0。这是因为未被初始化的 string 对象的长度被自动设置为 0。
 
 

4.4结构简介

     C++中的结构的可以满足要求(存储篮球运动员的信息)。结构是一种比数组更灵活的数据格式,因为同一个结构可以存储多种类型的数据,这使得能够将有关篮球运动员的信息放在一个结构中,从而将数据的表示合并到一起。如果要跟踪整个球队,则可以使用结构数组。结构也是C++OOP堡垒(类)的基石。学习有关结构的知识将使我们离C++的核心OOP更近。

 

29a955358d04488ab40e7d34942bead5.png

 

5efde37d98d34697becff66d728e6a28.png 

 

4.5 共用体  

         共用体(union)是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。也 就是说,结构可以同时存储 int、long 和 double,共用体只能存储 int、long 或 double。共用体的句法与结 构相似,但含义不同。例如,请看下面的声明:
b3b87a6172fc4daeb9f9af34dff8d46b.png

 

4.6 枚举  

C++的 enum 工具提供了另一种创建符号常量的方式,这种方式可以代替 const。它还允许定义新类型,但必须按严格的限制进行。使用 enum 的句法与使用结构相似。例如,请看下面的语句:
这条语句完成两项工作。
f806385d07f54ff0be53a43886685c88.png

 

 

 

 

4.7 指针和自由存储空间  

661ebc0697f24224a3d69e6262c3ea5e.png

 

dba2cf0c90da42aa86e0659ee33524ab.png 

 

dec60a471b3046c2b42da356146c52d0.png 

       对于指针,需要指出的另一点是,new分配的内存块通常与常规变量声明分配的内存块不同。变量nights和pd的值都存储在被称为栈(stack)的内存区域中,而new从被称为堆(heap)或自由存储区(free store)的内存区域分配内存。第9章将更详细地讨论这一点。 

 

4.8 指针、数组和指针算术

       指针和数组基本等价的原因在于指针算术(pointer arithmetic)和C++内部处理数组的方式。首先,我们来看一看算术。将整数变量加1后,其值将增加1;但将指针变量加1后,增加的量等于它指向的类型的字节数。将指向double的指针加1后,如果系统对double使用8个字节存储,则数值将增加8;将指向shot的指针加1后,如果系统对short使用2个字节存储,则指针值将增加2。程序清单4.19演示了这种令人吃惊的现象,它还说明了另一点:C++将数组名解释为地址。

ce9d20da1d2b48918166aea2cfce7115.png

 

2507c985ad8c4b5894f67ea024d5939f.png 

 

 

4.8.1 程序说明

在多数情况下,C++将数组名解释为数组第 1 个元素的地址。
2535d3812b894cba877ad7ab25ee6288.png

 

注意: 1 后,其增加的值等于指向的类型占用的字节数 

 

4.8.2指针小结

 


刚才已经介绍了大量指针的知识,下面对指针和数组做一总结。
1.声明指针
要声明指向特定类型的指针,请使用下面的格式:
typeName pointerName;
下面是一些示例:
double pn;
/pn can point to a double value
char pci
/pc can point to a char value
其中,pn和pc都是指针,而double*和char*是指向double的指针和指向char的指针。
2.给指针赋值
应将内存地址赋给指针。可以对变量名应用&运算符,来获得被命名的内存的地址,ew运算符返回
未命名的内存的地址。
下面是一些示例:
double pn;
/pn can point to a double value
double pa;
//so can pa
char pci
/pc can point to a char value
double bubble 3.2;
pn &bubble;
/assign address of bubble to pn
pc new char;
/assign address of newly allocated char memory to pc
pa new double[30]i//assign address of 1st element of array of 30 double to pa
3.对指针解除引用
对指针解除引用意味着获得指针指向的值。对指针应用解除引用或间接值运算符(*)来解除引用。因
此,如果像上面的例子中那样,pn是指向bubble的指针,则*pn是指向的值,即3.2。
下面是一些示例:
cout <*pn;/print the value of bubble
*pc ='S';/place 's'into the memory location whose address is pc
另一种对指针解除引用的方法是使用数组表示法,例如,pO]与*pn是一样的。决不要对未被初始化
为适当地址的指针解除引用。
4.区分指针和指针所指向的值
如果pt是指向int的指针,则*pt不是指向nt的指针,而是完全等同于一个int类型的变量。pt才是指针。
下面是一些示例:
int pt new int;
/assigns an address to the pointer pt
*pt =5;
/stores the value 5 at that address
5.数组名
在多数情况下,C++将数组名视为数组的第一个元素的地址。
下面是一个示例:
int tacos [10];
/now tacos is the same as &tacos [0]
一种例外情况是,将szof运算符用于数组名用时,此时将返回整个数组的长度(单位为字节).
6.指针算术
C++允许将指针和整数相加。加1的结果等于原来的地址值加上指向的对象占用的总字节数。还可以
将一个指针减去另一个指针,获得两个指针的差。后一种运算将得到一个整数,仅当两个指针指向同一个
数组(也可以指向超出结尾的一个位置)时,这种运算才有意义:这将得到两个元素的间隔。
下面是一些示例:
int tacos[10]={5,2,8,4,1,2,2,4,6,8}:
int pt tacos;
/suppose pf and tacos are the address 3000
ptpt 1;
/now pt is 3004 if a int is 4 bytes
int*pe=&tacos【9】;
/pe is 3036 if an int is 4 bytes
pepe 1;
/now pe is 3032,the address of tacos [8]
int diff pe -pt;
/diff is 7,the separation between
/tacos [8]and tacos [1]
7.数组的动态联编和静态联编
使用数组声明来创建数组时,将采用静态联编,即数组的长度在编译时设置:
int tacos[10];//static binding,size fixed at compile time
使用w]运算符创建数组时,将采用动态联编(动态数组),即将在运行时为数组分配空间,其长度
也将在运行时设置。使用完这种数组后,应使用delete[]释放其占用的内存:
int size;
cin >size;
int pz new int [size];/dynamic binding,size set at run time
▣。
delete [pz;
/free memory when finished
8.数组表示法和指针表示法
使用方括号数组表示法等同于对指针解除引用:
第4章复合类型
111
tacos [o]means *tacos means the value at address tacos
tacos [3]means *(tacos 3)means the value at address tacos 3
数组名和指针变量都是如此,因此对于指针和数组名,既可以使用指针表示法,也可以使用数组
表示法。
下面是一些示例:
int pt new int [10];
/pt points to block of 10 ints
*pt=5;
/set element number 0 to 5
pt[0]=6:
/reset element number 0 to 6
pt[9】=44;
/set tenth element (element number 9)to 44
int coats [10]
*(c0ats+4)=12;
/set coats(4]to 12

 

4.8.5 自动存储、静态存储和动态存储 

根据用于分配内存的方法,C++有 3 种管理数据内存的方式:自动存储、静态存储和动态存储(有时 也叫作自由存储空间或堆)。在存在时间的长短方面,以这 3 种方式分配的数据对象各不相同。下面简要地介绍每种类型(C++11 新增了第四种类型—线程存储,这将在第 9 章简要地讨论)。
1.自动存储
在函数内部定义的常规变量使用自动存储空间,被称为自动变量(automatic variable),这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。例如,程序清单 4.22 中的 temp 数组仅当 getname( ) 函数活动时存在。当程序控制权回到 main( )时,temp 使用的内存将自动被释放。如果 getname( )返回 temp 的地址,则 main( )中的 name 指针指向的内存将很快得到重新使用。这就是在 getname( )中使用 new 的原因之一。 实际上,自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段
代码。到目前为止,我们使用的所有代码块都是整个函数。然而,在下一章将会看到,函数内也可以有代码块。如果在其中的某个代码块定义了一个变量,则该变量仅在程序执行该代码块中的代码时存在。 自动变量通常存储在栈中。这意味着执行代码块时,其中的变量将依次加入到栈中,而在离开代码块时,将按相反的顺序释放这些变量,这被称为后进先出(LIFO)。因此,在程序执行过程中,栈将不断地增大和缩小。
2.静态存储
静态存储是整个程序执行期间都存在的存储方式。使变量成为静态的方式有两种:一种是在函数外面 定义它;另一种是在声明变量时使用关键字 static:
的 K&R C 中,只能初始化静态数组和静态结构,而 C++ Release 0(及后续版本)和 ANSI C 中,也 可以初始化自动数组和自动结构。然而,一些您可能已经发现,有些 实现还不支对自动数组和自动 结构
第 9 章将详细介绍静态存储。自动存储和静态存储的关键在于:这些方法严格地限制了变量的寿命。 变量可能存在于程序的整个生命周期(静态变量),也可能只是在特定函数被执行时存在(自动变量)。 符提供了一种比自动变量和静态变量更灵活的方法。它们管理了一个内存池,这在 C++ 中被 这使得跟踪新分配内存的位置更困难。 如果没有调用 delete,则即使包含指针的内存由于
2.静态存储
0a16745de353420ca26260d7328e8078.png
3.动态存储
new 和 delete 运算
称为自由存储空间(free store)或堆(heap)。该内存池同用于静态变量和自动变量的内存是分开的。程序清单 4.22 表明,new 和 delete 让您能够在一个函数中分配内存,而在另一个函数中释放它。因此,数据的生命周期不完全受程序或函数的生存时间控制。与使用常规变量相比,使用 new 和 delete 让程序员对程序如何使用内存有更大的控制权。然而,内存管理也更复杂了。在栈中,自动添加和删除机制使得占用的内存总是连续的, 但 new 和 delete 的相互影响可能导致占用的自由存储区不连续,这使得跟踪新分配内存的位置更困难。

 4.9 类型组合

c7c8132df9cd4f2c955b04f36a496cce.png

 

4.10 数组的替代品  

 ff4aa91e56e046e0902fc3c38c2fe435.png

 

63c43a7ca0644b4e8388ad705cd0e772.png 

 

 

bdce7dbfee5944c5a7561b7c44793200.png 

5eb16da32b494b36a32d20e7821a0530.png 

4.11 总结  

数组、结构和指针是 C++的 3 种复合类型。数组可以在一个数据对象中存储多个同种类型的值。通过 使用索引或下标,可以访问数组中各个元素。
结构可以将多个不同类型的值存储在同一个数据对象中,可以使用成员关系运算符(
.)来访问其中的成员。使用结构的第一步是创建结构模板,它定义结构存储了哪些成员。模板的名称将成为新类型的标识符,然后就可以声明这种类型的结构变量。
 
共用体可以存储一个值,但是这个值可以是不同的类型,成员名指出了使用的模式。
指针是被设计用来存储地址的变量。我们说,指针指向它存储的地址。指针声明指出了指针指向的对 象的类型。对指针应用解除引用运算符,将得到指针指向的位置中的值。
系列字符。字符串可用引号括起的字符串常量表示,其中隐式包含了结 尾的空字符。可以将字符串存储在 char 数组中,可以用被初始化为指向字符串的 char 指针表示字符串。函
数 strlen( )返回字符串的长度,其中不包括空字符。函数 strcpy( )将字符串从一个位置复制到另一个位置。
 
在使用这些函数时,应当包含头文件 cstring 或 string.h。
头文件 string 支持的 C++ strin 类提供了另一种对用户更友好的字符串处理方法。具体地说,string 对象将根据要存储的字符串自动调整其大小,用户可以使用赋值运算符来复制字符串。new 运算符允许在程序运行时为数据对象请求内存。该运算符返回获得内存的地址,可以将这个地址赋给一个指针,程序将只能使用该指针来访问这块内存。如果数据对象是简单变量,则可以使用解除引用 运算符 new 何时将内存归还给内存池。自动变量是
在函数中声明的变量,而静态变量是在函数外部或者使用关键字 static 声明的变量,这两种变量都不太灵 字符串是以空字符为结尾的一来获得其值;如果数据对象是数组,则可以像使用数组名那样使用指针来访问元素;如果数据 对象是结构,则可以用指针解除引用运算符(->)来访问其成员。
 
 
指针和数组紧密相关。如果 ar 是数组名,则表达式 ar[i]被解释为*(ar + i),其中数组名被解释为数组 第一个元素的地址。这样,数组名的作用和指针相同。反过来,可以使用数组表示法,通过指针名来访问 分配的数组中的元素。
 
运算符 new 和 delete 允许显式控制何时给数据对象分配内存,运算符new和delete允许显式控制何时给数据对象分配内存,何时将内存归还给内存池。自动变量是
在函数中声明的变量,而静态变量是在函数外部或者使用关键字saⅵc声明的变量,这两种变量都不太灵活。自动变量在程序执行到其所属的代码块(通常是函数定义)时产生,在离开该代码块时终止。静态变量在整个程序周期内都存在。
 
C++98新增的标准模板库(STL)提供了模板类vector,.它是动态数组的替代品。C++11提供了模板类array,它是定长数组的替代品。

练习题 

 c88cfc7be24f40e1aafc5689101f11f3.png

 

bb504177fce94e4bb20a33ba36a63a1c.png

 

2450100fae8e4ffbbe455922a965b5af.png 

ffb8346d44d74f69a22fa3f9c05ad835.png 

f7a5cf6f719d457b8bcf3774fd4daf89.png 

 

 

 

 846c23cd1536461d980b4b4254f315d8.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[算法与数据结构]--贪心算法初识

贪心算法贪心算法的解题过程贪心算法案例1.选择排序2. 平衡字符串3. 买卖股票的最佳时机 II4. 跳跃游戏5 钱币找零6 多机调度问题7.活动选择8. 最多可以参加的会议数目9. 无重叠区间来自算法导论对于这个贪心算法的解释定义贪心算法(又名贪婪算法)故名思意就是一个“贪心”的算…

小程序开发(一)新建/拉取项目,配置远程仓库

一、前期准备工作及工具 1、工具 微信开发者工具、Git 2、准备工作 相关开发工具的安装和配置工作请自行百度 二、新建或拉取远程项目 1、打开微信开发者工具(扫码登录等验证工作自行操作)&#xff0c;选择小程序。 2、点击号新建项目&#xff0c;项目名称、目录、模板选…

Git(狂神课堂笔记)

1.首先去git官网下载我们对应的版本Git - Downloading Package (git-scm.com) 2.安装后我们会发现git文件夹里有三个应用程序&#xff1a; Git Bash&#xff1a;Unix与Linux风格的命令行&#xff0c;使用最多&#xff0c;推荐最多 Git CMD&#xff1a;Windows风格的命令行 G…

kafka入门到实战三(单线程实现顺序消费,含demo)

这里需要前面两章的基础&#xff0c;如果没有环境或者看不懂在说什么&#xff0c;就翻一翻前两章。 kafka顺序消费&#xff08;单线程&#xff09; 顺序消费 顺序消费&#xff1a;是指消息的产生顺序和消费顺序相同。不管你用的是什么q或者kafka还是sofa&#xff0c;顺序依赖…

启动框架 Anchors接入和分析

参考:https://juejin.cn/post/6844904128443858958https://blog.csdn.net/gqg_guan/article/details/127760207从哪下手整个冷启动过程中&#xff0c;系统方法我们无法进行优化&#xff0c;主要需要优化的是系统暴露出来的一些生命周期方法&#xff0c;从Application的attachBa…

OSCP学习踩过的坑

OSCP终于拿到证&#xff0c;感觉参加考试备考的日子才过去没有多久&#xff0c;想起了那几个月被“虐待”的日子&#xff0c;我想总结下在课程和考试中的犯的错误&#xff01; 计划 我制定了一个学习计划&#xff0c;计划是学习、练习&#xff0c;然后再学习、练习一些&#…

SpringCloud:服务拆分及远程调用

目录 SpringCloud&#xff1a;服务拆分及远程调用 1、服务拆分 2、远程调用 SpringCloud&#xff1a;服务拆分及远程调用 SpringCloud是目前国内使用最广泛的微服务框架。 官网地址: Spring Cloud SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了…

【10】SCI易中期刊推荐——工程技术-计算机:人工智能(中科院2区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…

JAVA开发(Eureka基本原理)

Eureka基本原理。 通过上图我们可以看出&#xff0c;服务提供者在启动的时候需要向注册中心注册自己的信息&#xff0c;而注册中心把向自己注册的服务提供者都保存下来&#xff0c;以便服务消费者获取用来发起请求&#xff0c;而服务消费者需要从注册中心获取服务提供者列表&am…

网络层:IP协议

目录 基本概念 IP报头 IP报文分片 为什么要分片&#xff1f; 如何分片&#xff1f; 分片的报文如何组装&#xff1f; 分片策略如何&#xff1f; 网段划分 IP地址被分成了五类IP&#xff1a; CIDR 特殊的IP地址&#xff1a; 私有IP和公网IP 路由 如何转发数据包&a…

「ABAP」一文带你入门OPEN SQL中的SELECT查询(附超详细案例解析)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

阿里云服务器价格,阿里云轻量应用服务器最新价格表

阿里云服务器从地域上来区分可分为ECS云服务器和轻量应用服务器&#xff0c;从活动内容来区分又可分为秒杀云服务器和新用户特惠云服务器&#xff0c;下面是截止目前&#xff0c;阿里云服务器最新的秒杀及新用户特惠购买价格&#xff0c;以表格形式形式展示出来以供参考。 阿里…

​ICLR 2023 | 图数据分布外检测:从能量模型出发

©PaperWeekly 原创 作者 | 吴齐天单位 | 上海交通大学博士生研究方向 | 机器学习与图深度学习继续探索 Graph OOD 的相关问题&#xff0c;与以往工作不同的是&#xff0c;这篇工作避开了复杂的数学推导和琐碎的数据生成过程&#xff0c;直接从简单有效的判别模型入手研究…

【Spring】掌握 Spring Validation 数据校验

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Spring Validation 数据校验一、什么是 Spring…

RAN-in-the-Cloud:为 5G RAN 提供云经济性

RAN-in-the-Cloud&#xff1a;为 5G RAN 提供云经济性 5G 部署在全球范围内一直在加速。 许多电信运营商已经推出了5G服务并正在快速扩张。 除了电信运营商之外&#xff0c;企业也对使用 5G 建立私有网络产生了浓厚的兴趣&#xff0c;这些私有网络利用了更高的带宽、更低的延迟…

【编程基础之Python】8、Python复合数据类型

【编程基础之Python】8、Python复合数据类型Python复合数据类型列表&#xff08;List&#xff09;创建列表访问元素内置方法列表操作元组&#xff08;Tuple&#xff09;创建元组访问元素集合&#xff08;Set&#xff09;创建集合基本操作其他操作字典&#xff08;Dictionary&am…

4.ffmpeg命令转码规则、过滤器介绍、手动流map选项

在上章我们学习了ffmpeg命令行帮助以及选项查找 本章我们来深入学习ffmpeg命令转码规则、过滤器介绍、手动流map选项 参考链接: 1.ffmpeg命令行转码流程 ffmpeg命令行转码流程如下图所示: 对应中文则是: 步骤如下所示: ffmpeg调用libavformat库(包含解复用器)来读取输入文件…

Linux -- 查看进程 PS 命令 详解

我们上篇介绍了&#xff0c; Linux 中的进程等概念&#xff0c;那么&#xff0c;在Linux 中如何查看进程呢 &#xff1f;&#xff1f;我们常用到的有两个命令&#xff0c; PS 和 top 两个命令&#xff0c;今天先来介绍下 PS 命令~&#xff01;PS 命令 &#xff1a;作用 &#x…

C语言拔高知识——指针的进阶(万字大文超详细)

在之前的文章中&#xff0c;我已经讲解过了初阶指针的内容&#xff0c;今天就来讲一讲指针的进阶&#xff01; 上篇指针地址&#xff1a;保姆式指针讲解&#xff0c;超详细&#xff0c;适合初学者_指针详解_陈大大陈的博客-CSDN博客 目录 1. 字符指针 2. 指针数组 3. 数组指…

3年测试经验的人来面试,简历都没写明白,一开口就要给20K的offer?

​我最近阅读了大约15份简历&#xff0c;他们都在申请我的团队的测试工程师职位。但是没有一份表达清楚了他是如何进行测试的。 下面我摘录了一些 信息&#xff1a; 几乎所有的应聘者都罗列了成串儿的他们熟悉的“技术”&#xff08;包括但不限于….Net&#xff0c; Unix&#…