c++拾遗-----复合类型

来源:互联网 发布:杭州观澜网络怎么样 编辑:程序博客网 时间:2024/06/07 08:26

1、cout拼接字符串常量

任何两个由空白分隔的字符串常量都将自动拼接成一个

cout<<"hello " "world"<<endl;cout<<"hello world\n";cout<<"hello ""world\n";

2、sizeof和strlen区别

  • sizeof是操作符,结果类型为size_t,typedef中定义为usigned int
  • sizeof可以用类型做参数,而strlen参数只能为char*,且以’\0’结尾
  • sizeof获得保证能容纳实现所建立的最大对象的字节大小,而strlen关注的数组的实际内容大小,且空字符除外

3、cin与cin.get()及cin.getline()

cin使用空白(空格,制表符,换行符)来确定字符串的结束位置,在读取第一个单词后,自动在其最后加上空白符,存入数组,剩下的单词留在输入队列,并不回丢弃换行符。

cin.getline()通过回车键输入的换行符确定输入结尾。参数一:存放输入的数组名,读取的字符数,如果这个参数为20,那么最多读取19个字符,剩余的空间用于存储自动在结尾处添加的空白符,getline在读取指定数目的字符或遇到换行符时停止读取。但当缓存中的字符个数超过读取字符个数,cin的failbit将被置为true,需调用cin.clear()清除错误标志。

cin.get()

方式一:与getline类似,参数相同,也读到行尾,但并不在读取并丢弃换行符,而是将其留在输入队列中

方式二:不带参数,读取输入队列的下一个字符

4、C与C++结构体声明

在C中创建结构体有2种方式

struct MyStruct{   int element1;};

声明变量:struct MyStruct mystruct;

typedef struct tag_MyStruct{    int element1;}MyStruct,*PMyStruct;

声明结构体别名,上述语句等价于

struct tag_MyStruct{    int element1;};typedef tag_MyStruct MyStruct;typedef tag_MyStruct *PMyStruct;

声明变量:
MyStruct mystruct;
PMyStruct pmystruct;

在c++中可以直接使用struct定义结构体,并且可以在定义时直接声明

struct MyStruct{   int element1;}mystruct;

在定义结构体的同时可以声明变量。

5、共用体

union MyUnion{   int ele1   struct MyStruct   {      int ele2;      int ele3;   }}myunion;

存储空间大小以最大的为准,上例为MyStruct大小,只存储一个成员的值,
成员不能包括静态,引用,类。

6、枚举

默认情况下第一个枚举量值为0。枚举量是整形,可以被提升为int形,但int形不能自动转换为枚举类型.同时可以定义该类型枚举变量,并为其赋值,但不能超出该类型范围,同时只能使用枚举量给枚举变量赋值。

enum MyEnum{red,oranage,yellow,green};int color=red+1;//validMyEnum myenum=yellow;//valid//使用+号意味着yellow和orange转为int,相加后无法在赋值给枚举变量MyEnum myenum2=yellow+orange;//invalid

当然也可以给枚举量赋值

enum MyEnum{red,oranage=10,yellow=10,green};/*red=0;orange=10;yellow=10;green=11;*/

可以给枚举量赋相同的值,没有初始化的将比上一个枚举量大一。

7、指针

使用new来分配内存

声明指针并分配内存空间

int *p=new int;

使用delete删除分配空间

创建动态数组,创建完成后删除。

#include<iostream>int main(){   int m;   std::cin>>m;   int *p=new int[m];   delete []p;   return 0;}

使用new和delete应当遵从以下规则:

  • 不要使用delete来删除不是new创建的空间
  • 不要使用delete来释放同一内存块两次
  • 如果使用new[]来为数组分配内存,则应使用delete[]来释放
  • 如果使用new为实体分配内存,则应使用delete来释放
  • 对空指针使用delete是安全的

加减运算

与整数相加

加1的结果等于在原来的地址上加上指向的对象占用的总字节数

int a[4]={0,1,2,3};int *p=a;int temp=*(p+2);//temp为2

指针相减

当两个指针指向同一数组时,两指针相减得到间隔

int a[4]={0,1,2,3};int *p=a;int *q=&a[4];int diff=q-p;//diff3

指针常量与常量指针

指针常量,指针指向内存的地址不能改变,必须在声明时初始化;

int a=8;int *const p=&a;*p=5;p++;//error

常量指针,指针指向内存的内容不能改变

int a=5;int b=4;const int *p;p=&a;p=&b;*p=5;//error

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

1、自动存储

在函数内部定义的常规变量使用自动存储空间,在所属函数被调用时创建,在函数结束时消亡。存储在栈中。占用内存总是连续的。

2、静态存储

在程序整个执行期间都存在的存储方式,是变量称为静态的方式有两种:在函数外定义变量;在声明变量时使用static关键字。

3、动态存储

使用new和delete分配或释放内存,变量的生存周期不受程序或函数生存时间控制,内存区域称为堆。占用内存并不一定连续

9、模板类vector与模板类array

vector

使用前需包含头文件vector,vector在std空间中,可以指定不同的存储数据类型,可以指定元素个数

#include<vector>int main(){   int m;   std::cin>>m;   std::vector<int> arr(m);   return 0;}

使用new和delete来管理内存,效率不高,基本用法:vector<typename> vt(n_elem),创建一个名为vt的vector对象,可以存储n_elem个typename类型元素

array

使用前需包含头文件array,同样声明在std空间中,基本用法:array<typename,n_elem> arr;n_elem不能为变量,可以直接将一个array对象赋值给另一个array对象

相同点

都可以使用标准数组表示法来访问各元素
可以使用at()访问元素,能够检测下标超界,但效率较低

不同点

array与数组都存储在栈中,而vector存储在自由存储区

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 写作业老要睡觉怎么办 孩子写作业精神不集中怎么办 小孩精神不集中要怎么办 注意力不集中上课走神怎么办 注意力不集中总是走神怎么办 孩子注意力不集中走神怎么办 上课老走神注意力不集中怎么办 注意力不集中老走神怎么办 7岁儿童视力0.6怎么办 三岁宝宝注意力不集中怎么办 四岁宝宝注意力不集中怎么办 一直在想一件事怎么办 买的家具味道大怎么办 买的木床有味道怎么办 宝宝拍胸片衣服有扣子怎么办 前扣内衣扣子坏了怎么办 运动内衣穿上平胸怎么办 文胸的海绵变形了怎么办 文胸背部松紧变形了怎么办 黑色裤子被漂白水漂红了怎么办 黑色裤子晒红了怎么办 黑色裤子泛红了怎么办 黑色裤子洗红了怎么办 新内衣穿了痒怎么办 灰色针织运动裤洗完发黄怎么办 皮衣买大了一号怎么办 紧身衣破了一个洞怎么办 紧身衣破了一个小洞怎么办 内衣肩带不带调整的怎么办 不正确佩戴胸罩导致下垂怎么办 增肌时期晚上饿怎么办 啤酒和可乐喝了怎么办 脸部毛孔堵塞不出汗怎么办 减肥运动完饿了怎么办 想减肥晚上饿了怎么办 孕妇喝不进去水怎么办 跑步喝多了水怎么办 衣柜门轮子坏了怎么办 穿瑜伽裤下边有缝怎么办 3岁宝宝比较内向怎么办 我想和我同学搞基怎么办