C++ Primer Plus 随记2(第四章)

1.声明数组: short months[12]; 访问其元素:month[0]~month[11]
2.初始化数组:(1)int yam[3]={20, 3, 5}; // 列表初始化可省略等号,也可{}不包含数据,元素均初始化为0
(2)int xam[3]; xam[0]=20; xam[1]=3; xam[2]=5;
xam[3]={20,3,5};//错,不允许 xam=yam; //错,不允许将一个数组赋给另一个数组
long ph[]={25, 92, 3.0}; //错,列表初始化禁止缩窄转化,浮点double 转化为长整型 long 为缩窄转化
3. (1)c=sizeof yam; //结果是整个数组的字节数 c=12;
(2)c=sizeof yam[0]; //结果是元素的字节数 c=4;
(3) sizeof yam/sizeof yam[0] 可以用于计算数组元素个数
4. C++标准模板库(STL)提供了数组替代品——vector ,C++11新增模板类array.
5. 在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。
6. 'S’是一个字符常量, “S”表示两个字符S和\0组成的字符串。 “S”实际上表示字符串所在的内存地址。
7. 数组初始化字符串常量: char name1[15]=“C++OwBody”;
sizeof (name1)=15 ; // 整个数组长度
strlen(name1)=9; // 存储在数组中的字符串长度,只计算可见字符,不计算空字符和结束字符\0;
4. 面向行的输入:一般在输入名字变量时应使用面向下一行输入,读取多个单词
(1) cin.getline(name,20);//name:数组名,20:字符数可以读取一行中不超过字符数的多个单词, Enter生成换行符,并将换行符替换为空字符(1) cin.getline(name,20);//name:数组名,20:字符数可以读取一行中不超过字符数的多个单词, Enter生成换行符,并将换行符替换为空字符
(2)cin.get(name,20) ; cin.get(desetr,20) ; //会读到行尾并保留换行符到输入队列中连续2次调用get(),在第二调用看到的第一个字符时换行符,认为以达到行尾,无法继续读取
正确调用方法:cin.get(name,20).get();
5. 空行或其他问题,用以下命令恢复输入: cin.clear();
6. string 对象声明为简单变量,而不是数组,程序可自动处理string 的大小。利用string,加入头文件 #include
7. (1)char charr1[20]; char charr2[20]=“jagura” ;
charr1=charr2; //此句数组赋值语句不合法
strcpy(charr1,charr2); //将charr2复制到charr1
strcat (charr1,charr2); //将charr2附加到charr1末尾,
int len=strlen(charr1); //确定字符串中字符数 strlen()是函数
(2)string str1; string str2=“pather”; str1=str2; //最后一句合法
string str3; str3=str1+str2; str2+=str1; //合法
int len=str1.size();//确定字符串中字符数 str1是一个string类 的对象,size()是string类的一个方法。
6. char charr[20]; cout<<strlen(charr); //屏幕输出的结果不确定,可能大于20,或小于20,。为初始化的数组未定义。strlen()从数组第一个元素开始计算字符字数,直到遇到空字符。对为初始化的数组,第一个空字符出现的位置是随机的。
string str; cout<<str.size(); //屏幕输出结果为0.初始化的string对象长度自动设置为0
7. 将下一行输入读取到数组中的代码: cin.getline(charr1,20); //这句表明cin是istream类的对象,getline()是istream类的方法
将下一行输入读取到string对象中的代码:getline(cin.str); //这句表明getline()不是类方法,在istrea类中有处理double,int
//等其他基本类型的类方法,但没有处理string对象的类方法
cin>>str; //合法,应用了istream类的一个成员函数cin>>x
10. 结构声明初始化:#include
struct inflatable{ char name[20], float volume, double price};
struct inflatable{ std::string name, float volume, double price}; //结构可以将string类作为成员,但要指明访问的名称空间
inflatable duck={“Daphe”, 0.12, 9.98};
inflatable Bobu; Bobu=duck; //结构赋值是有效的
struct peak{ int number, char car[20]} Ala, bay; // Ala, bay是结构peak的两个结构变量。
初始化结构数组: inflatable guest [2]={ {“Daphe”, 0.12, 9.98}, {“Bobu”, 0.34, 6.34} };
11. 共用体:可以储存不同数据类型,但具体某一时刻只能储存一种类型。
12. 枚举: enum spectrum { red, orange, yellow, green, blue, violet, indigo, ultraviolet }; //符号常量,对应的整数值为0~7
spectrum band; //band只能从枚举spectrum定义的8个常量里选择值
设置枚举量的值:指定的值必须为整数
enum bits{one=1 ,two=2, four=4, eight=8 };
enum bitstep{ first, second=100, third }; //first默认为0,后面未初始化的枚举量比前面大1,third =101
enum {zero, null=0, one, nuero=1}; //可以创建多个相同值的枚举量
枚举的取值范围: bits myflag; myflag=bits(126); //合法,上限为最大值的2的幂-1,2^8-1=127

猜你喜欢

转载自blog.csdn.net/lvliang2017232003/article/details/85332232