关于c++中的复合类型
- 数组
- 字符串
- 结构体
- 共用体
- 枚举
- 指针
- 数和指针的关系
- 常见的存储方式
- 数组替代品
- 存储在每个元素中值的类型
- 数组名
- 数组中的元素数
- 通用格式:typename arrayname [arraysize];
- 数组从0开始编号,在最后一个元的索引,比数组长度小1
- 初始化时可以用大括号{}为元素赋值,中间用逗号隔开。如果只对数组一部分进行赋值,则编译器把其他赋予0
- c++11新增数组初始化可以不用=。大括号可以不包含任何东西,默认全为0 。
- 禁止缩窄转换,如浮点型转整型,int a[]={3.6,1,2.0}; //is not allowed;
- 字符串输入
- cin通过空白(空格,制表符,换行符)来确定字符串结束的位置
- getline()函数通过回车和换行符来确定结束,属于每次读取一行字符串
- 调用该函数可使用cin.getline(变量名,长度)
- 当将一行数据输入到string类中:getline(cin,str),不需要大小参数
- get()函数中有一种变体属于面向行输入,跟geiline类似,但get不会丢弃换行符,需要调用get()函数不带参数的变体,否则将影响输入。
- cin.get((name,ArSize); cin.get(); 或者cin.get((name,ArSize).get();
- get读取空白行后将设置失效符,意味着接下来的输入将会被阻断
- 可以使用恢复命令cin.clear()
- 使用getline使输入方便,使用get使输入仔细,如知道停止输入的原因是已经读取到正整行数据,而不是数组过小。
- char 型数组
- strlen(数组名)确定该数组字符串长度。
- sizeof(数组名)运算符指出整个数组的长度,
- strcpy(数组一,数组二)将数组2复制到数组1,数组一中原有数据清空,
- strncpy(数组一,数组二,字符数),比strcpy接受多一个参数,复制的数量
- strcat(数组1,数组2)将数组2追加到数组1中
- strcmp(字符串地址一,字符串地址二)比较两个字符串是否相等,相等返回0
- 注意添加头文件cstring,比较旧的编译器中为string.h。
- string类
- 使用string时要使用头文件,且在于using namespace std之前;string类隐藏了字符串的性质,让您能够像处理普通变量那样处理字符串。
- 运用时直接定义string类的对象为简单变量:string str1; string str2="chengjunfeng";
- 使用string对象时,能够自动处理string大小,从理论上来说,char数组可以看成一组储存一个字符串的char存储单元,而string类变量是一个表示字符串的实体。
- string简化了字符串合并的操作,直接使用运算符+将两个string对象结合起来,使用=将出现复制,也可以用+=将字符串追加到string对象末尾。str1.size()可以返回str1的长度大小。
- 通过运用行输入getline()函数,需要这样表示:getline(cin,str);因为getline不是string类的方法,它将cin作为参数,指出去哪里查找输入。
- 相对于数组,string不必担心字符串会越界以及可以更简单操作字符串
- 当string对象存储了字符串,可以像数组一样访问单个字符
- 结构是类的基石,结构是用户定义的类型,而结构声明定义了这种类型数据的属性
- 结构的组成部分:
- 结构定义变量后,可以用运算符(.)来访问各个成员如:
- 结构也可以定义结构数组变量,有着数组的特性;cheng feng[2]
- c++提倡使用外部结构声明,不提倡外部变量,
- 通过使用new创建动态结构:
- 创建结构
- 结构类型和new :要创建一个未命名的inflatable类型,并将地址付给一个指针
- iniflatable *ps=new inflatable/////把储存inflatable结构的一块可用内存地址赋给ps
- 访问其成员
- 创建动态结构不能通过成员运算符句点用于结构名,要用箭头成员运算符(->)
- 计算机储存数据时必须跟踪3种基本特性:
- 信息储存在哪里
- 存储的值为多少
- 存储的信息是什么类型
- 指针是一个变量,用于储存值的地址,指针名表示的是地址,其储存的是值的地址而不是值本身,要找值的本身需要用解除引用符 * 。
- 常规变量可以用地址运算符 & 找到它的位置;显示地址时,cout使用16进制表示法。
- 声明和初始化指针:
- 一定要在对指针解除引用前,将指针初始化为一个确定、适当的地址。
- 当需要内存时用new获取,不需要时用delete归还给内存池
- new运算符:使用new,c++会自动为你分配内存
- 使用new自动赋予地址
- 类型 * 变量名 =new 类型 ; int* a=new int;
- 使用new 和delete 时要遵守一下规则
- 不要使用后delete 来释放不是new 分配的地址
- 不要使用delete释放一个内存块两次
- 如果使用new[ ]为数组分配内存,则应使用delete来释放
- 如果使用new为一个实体分配内存,则直接用delete来释放
- 对空指针使用delete是安全的
- 如果使用new后没有用delete释放内存,在自由存储空间上动态分配的变量或结构也将继续存在,实际上将会无法访问自由储存空间中的结构,因为指向这些内存的指针将无效,俗称“内存泄漏”。这些内存被分配出去但无法收回
- 避免造成内存泄漏将同时使用new和delete
- 如果给out提供一个指针,将打印其地址,如果指针为char*,则打印其指向的字符串,需打印地址,则必须将这种指针类型强制转化成另一种类型,如(int*)
- 在编译时给数组分配内存时称为静态编联,即数组在编译时设置长度所需内存,使用new [ ] 的数组称为动态编联,即将在运行时自动为数组分配空间。在运行时需要就创建,不需要就不创建。特就是说运行时创建优于编译时创建。
- 数组名被解释为第一个元素的地址,但是运用了地址运算符时,得到的是整个数组的地址。
- 数组的本质是一种特殊的指针,数组的地址是连在一起的,指针是分散的;数组a[0]时指针指向第一个地址,当a[0+1]是指针自动跳到下一个地址,如数组a为int则&a[0]比&a[1]少8。
- 对于数组n:
- *(n+i)=n[i] //// n[0] 表示*n,即数组n的首地址。 n[3]表示*(n+3) 即数组n的首地址加3个单位
- 数组名被解释为第一个元素的地址,但是运用了地址运算符时,得到的是整个数组的地址
- 为数组分配内存的通用格式
- type _name * pointer_name =new type _name [num_elements] int *a=new int [3];
- 这样可以把指针名当做数组名使用
- c++允许将指针与整数相加减,指针数组P指的是P[0],P=P+1后P指向P[1],即指向指针的下一个元素地址。
- char 数组名、char指针及用引号括起来的字符串常量都被解释为字符串第一个字符的地址
- 自动存储
- 函数内部定义的常规变量使用自动存储空间,称为自动变量
- 函数调用时自动产生,函数结束时自动消亡
- 即自动存储的变量为局部变量
- 静态存储
- 函数外面的变量即全局变量
- 关键字static声名的变量
- 动态存储
- 使用new和delete管理内存池为变量分配地址,数据的生命周期不受程序和函数的生存空间控制
- 使用new和delete让我们使用内存有更大的管理权
- 模板类vector
- vector是一种动态数组,他是使用new创建动态数组的替代品,内部自动使用new和delete来管理内存。
- 使用vector对象,首先要包含头文件vector,它包含在空间std中,所以要在using之前使用头文件
- vector<数据类型> 对象名 (长度,满了之后扩充数量);
- 可以在运行时设置vector对象长度,可在末尾追加新数据也可以在中间插入数据
- vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。
- 模板类arrary(c++11)
- 创建array对象,需添加arrary头文件
- arrary<typename,长度> 对象
- 可以将一个arrary对象赋予另一个arrary对象
关于c++中的复合类型的更多相关文章
- c++中的复合类型
复合类型是指基于其他类型而定义的类型. 而这里介绍的是引用和指针.并且指针和引用都提供了对其他对象的间接访问. 引用 引用还是很好理解的,就是为对象起了另外一个名字,引用类型引用另外一种类型. 通常将 ...
- C语言中的复合类型
复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...
- 带你学够浪:Go语言基础系列 - 8分钟学复合类型
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- lua 中protobuf repeated 嵌套类 复合类型
PB基础知识科普 syntax = "proto2"; package PB; message Item { required string name = ; } message ...
- 第54讲:Scala中复合类型实战详解
今天学习了scala的复合类型的内容,让我们通过实战来看看代码: trait Compound_Type1trait Compound_Type2class Compound_Type extends ...
- 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11 TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...
- 实现在GET请求下调用WCF服务时传递对象(复合类型)参数
WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原 ...
- go语言 类型:基础类型和复合类型
Go 语言中包括以下内置基础类型:布尔型:bool整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint浮点型:floa ...
随机推荐
- 和朱晔一起复习Java并发(四):Atomic
本节我们来研究下并发包中的Atomic类型. AtomicXXX和XXXAdder以及XXXAccumulator性能测试 先来一把性能测试,对比一下AtomicLong(1.5出来的).LongAd ...
- Feign挡板和Mock
背景: 在项目开发中,会有调用第三方接口的场景.当开发时,对方不愿意提供测试服务器给我们调用,或者有的接口会按调用次数进行计费.当联调时,第三方的测试服务器也可能会出现不稳定,如果他们的服务挂了,我们 ...
- C#3.0新增功能07 查询表达式
连载目录 [已更新最新开发文章,点击查看详细] 查询是什么及其作用是什么 查询是一组指令,描述要从给定数据源(或源)检索的数据以及返回的数据应具有的形状和组织. 查询与它生成的结果不同. 通常情 ...
- C#3.0新增功能09 LINQ 基础03 LINQ 和泛型类型
连载目录 [已更新最新开发文章,点击查看详细] LINQ 查询基于 .NET Framework 版本 2.0 中引入的泛型类型. 无需深入了解泛型即可开始编写查询. 但是,可能需要了解 2 个 ...
- 一个简单的JS倒计时
看到很多商城都是抢购倒计时的功能,今天闲来无事做了个倒计时.全当学习JS. 主要思路:主要用到Date对象,声明一个变量获取当前时间,在声明一个变量获取结束时间,结束时间-当前时间=剩余时间(倒计时) ...
- 盘一盘 synchronized (二)—— 偏向锁批量重偏向与批量撤销
在本文讲解之前,先来简单了解一下为什么会有批量重偏向和批量撤销. 批量重偏向:当一个线程创建了大量对象并执行了初始的同步操作,后来另一个线程也来将这些对象作为锁对象进行操作,会导偏向锁重偏向的操作 ...
- linux初学者-系统日志(一)
linux初学者-系统日志(一) 系统日志可以记录系统的运行状态,如果运行故障,会说明错误的位置.所以对系统日志的了解和学习是非常有必要的. 1.系统日志的默认分类 系统日志会默认记录在以下地址中,不 ...
- linux初学者-sshd服务
linux初学者-sshd服务 在linux系统操作中,经常需要连接其他的主机,连接其他主机的服务是openssh-server,它的功能是让远程主机可以通过网络访问sshd服务,开始一个安全s ...
- 0 推荐系统——CB和CF
一.基于内容的推荐(CB,Content-based Recommendations): 基于内容的推荐CB应该算是最早被使用的推荐方法,它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和 ...
- phpStudy 升级 MySQL 到 5.7.21
1.备份原来的MySQL 我的路径是D:\phpStudy2018\PHPTutorial\MySQL\bin 修改文件名为MySQL-backup 2.下载新的MySQL 5.7.21 网址:htt ...