05.23__C++记录

  • 复合类型声明

int*  p1,p2;//p1为指向int类型的指针,p2为int型变量。

 

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

要理解上述r的类型是什么,可以从右向左读r的定义,离变量名最近的符号就是r 的类型,代码中r最近的符号为&,则r为引用。此例中*说明r引用的是一个指针,int则说明r引用了一个int型的指针。

 

  • 使用const限定符限定变量,必须要初始化,且初始化后,变量的值就不能再改变。

多个文件中同名的const变量实际上是不同的对象,如果希望不同文件的同名const对象是同一个对象,需要在声明和定义的前面加上extern。

把引用绑定到const对象上,称为对常量的引用,即对const的引用称为对常量的引用。

指向常量的指针,不能用于修改其所指对象的值。 

 

  • 常量指针必须初始化,并且初始化后不能再改变存放在指针中的地址,不变的是指针本身的值而不是指向的值。

int  errNumb=0;

int  *const  currErr=&errNumb;//curErr将一直指向errNumb

const double pi=3.1415;

const double *const pip=π//pip是一个指向常量对象的指针

指针本身是常量不代表不能通过指针修改所指对象的值,要看所指对象是否是常量,如果所值对象是常量则不能改变,否则编译器将报错。

 

  • 类型别名使用typedef如

typedef double wage;

typedef wage base,*p//base是double的同义词,p是double*的同义词

 

  • using关键词用于别名声明的

using SI=Sale_item;

 

  • 注意,类型别名指代复合类型时不是简单的替换,如

typedef char *pstring;

const pstring cstr=0;  //cstr是一个指向char的常量指针

const pstring *ps;       //ps时一个指针,对像是指向char的常量指针

第二句不能简单的替换为

const char *cstr=0;这样就变成了指向const char的指针

 

  • auto类型的说明符让编译器自动分析表达式所属的类型

auto  item =val1+val2;  //通过val1和val2推断item的类型

 

  • decltype类型指示符,选择并返回操作数的数据类型。如果decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型;如果给变量加上了一层或多层括号,编译器就会把它当做是一个表达式。

decltype((i))的结果永远是引用,而decltype(i)只有当i本身就是一个引用时才是引用。

 

  • 类定义后记得加分号,因为这里可以直接声明对象,需要用分号表示结束,如果不声明就直接加分号即可。

 

  • string表示可变长的字符序列,vector表示某种给定对象的可变长序列。

 

  • 头文件不应包含using声明,因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件内有using声明,每个使用了该头文件的文件就都会有这个声明,可能会产生名字冲突。

 

  • 初始化string对象的方法:

string s1;

string s2(s1);

string s2=s1;

string s3(“value”);

string s3=“value”;

string s4(n ,‘c’);//用n个字符c组成字符串

 

  • string操作

os<<s

将s写到输出流os中,返回os

is>>s

将is中读取的字符串赋给s,字符串以空白分割,返回is

getline(is,s)

从is中读取一行赋给s,返回is

s.empty()

s为空返回true,否则返回false

s.size()

返回s中字符的个数

s[n]

返回s中的n个字符的引用,从0算起

s1+s2

返回s1与s2连接后的结果

s1=s2

用s2的副本代替s1中的字符

s1==s2

s1与s2的字符相等为真

s1!=s2

不相等为真

<,<=,>,>=,

利用字符字典序比较,对大小写敏感

 

 

  • string输入,会忽略开头的空格,从第一个字符开始输入,直到下一个字符为空格时停止。比如输入“       hello world     ”的输出为“hello”。

 

 

  • string中的size函数返回的时无符号整数,如果表达式中使用带符号数可能引发错误。如

line.size()<n;//如果n取负数这个表达式恒成立,因为负数n会转化为一个很大的无符号数

所以当表达式中带有size函数计算时就不要使用int型变量了。

 

  • string对象的比较规则:

1、当两个长度不同,且较短string对应位置字符与长string相同,较短的小于长的。

2、对应位子字符不同,比较结果时string对象中第一对相异字符的比较结果(字典序)。

 

  • 对string对象中的每个字符处理时,可以使用范围for语句。

for(declearation:expression)

      statement

如果想要改变string对象中的值,必须把循环定义中的declearation定义成引用类型。

 

  • 标准类型库vector

表示对象的集合,其中所有对象的类型都相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值