C++ PP chapter Ⅳ 复用类型
2016-07-15 15:02
579 查看
0.三种复合类型: 数组、结构、指针 1.数组被称为复合类型 数组声明应当指出三点: a.存储在每个元素中的值的类型(typeName) b.数组名(arrayName) c.数组中的元素数(arraySize) 声明数组的通用格式: typeName arrayName[arraySize] 2.让编译器确定数组大小 例如: a. int things = sizeof things / sizeof (short) b. int num[] = {1,2,3}; c. char str[] = "I hate C++11" 3.字符串输出的拼接 使用两对引号进行分行拼接 例如: cout << "I'd give my right ar" "m to be a great violinist"<<endl; 4.cin读取字符串规则 [普通的]cin使用空白符(空格、制表符、换行符)来确定字符串的结束位置 并且会自动在字符串结尾添加空字符,但是会把空白符遗留在缓冲区! 5.cin面向行的类成员函数 Ⅰ. getline() 该函数读取整行,以换行符来确定输入结尾 调用方法 cin.getline(),有两个参数,数组名,和最多读取的字符数(有回车直接停止) 例如: cin.getline(Name,20);//最多会读取19个字符!最后一个自动加空白符 注:getline 会读取缓冲区换行符并丢弃,在字符串后加空白符 连续读取方法 例如: cin.getline(name1,Size1).getline(name2,Size2);//连接合并 Ⅱ. get() 带参数的get似getline,但是会留换行符在缓冲区 不带参数的get会读取下一个字符(包括换行) 连续读取方法 例如: cin.get(name,Size).get();//连接合并 6.string 类 使用string对象的方式与使用字符数组相似 string可以自动处理大小,0 例如: string str = "panther"; string strB; cin>>strB; 操作: a. 赋值、拼接、附加 //对于C-风格需要用 strcpy() 和 strcat()函数 一个string对象可以直接赋值给另一个string对象 例如: str2 = str1; 可以用运算符 + 使得两个string对象合并 例如: str3 = str1 + str2; 可以附加到string对象的结尾 例如:str1 += str2; b. string 类的其他操作 具有自动调整大小功能! c.string 类I/O 要注意的是读取一行时,使用方法: getline(cin,strName); //涉及到更深的内容,本章未讲 7.结构体 a. C++允许typedef省略 例如: struct inflatable { char name[20]; float volume; double price; std::string test;//可以使得string类成为成员 }; b. C++对结构体的初始化 例如: inflatable guest = { "Glorious Gloria", //name value 1.88, //volume value 29.99 //price value }; 可写在同行 inflatable duck = {"Daphne",0.12,9.98}; 补: C++11 I . 允许初始化时 = 缺省 inflatable duck {"Daphne",0.12,9.98}; II. 各个成员设置为0 inflatable mayor {};//inflatable mayor = {}; c. 结构体数组的初始化 例如: inflatable guests[2] = { { "Bambi",0.5,21.99}, { "Tony",2000,562.5} }; 8.共用体(union) 能够同时存储不同的数据类型,但是只能同时存储其中的一种类型(某时刻只有一个合法的类型变量),句法与结构体相似,但含义不同 共用体的长度为其最大成员的长度 此处只总结一种常用的 匿名共用体 例如: struct widget { char brand[20]; int type; union (缺省A) { long id_num; char id_char[20]; }(缺省B); }; ... widget prize; ... if(prize.type) cin >> prize.id_num; //使得无需经过变量名B else cin >> prize.id_char; 9.枚举(enum)//只定义了赋值运算符 例如: 创建新类型: enum spectrum {red,orange,yellow,green};//red,orange..被称为符号常量,对应整数值0~3 可以显式的设置枚举量的值 enum Test {red = 2,orange = 4}; 声明变量 : spectrum band; 赋值 : band = red; band = orange + 1;//等价于 band = yellow 不合法的赋值: band = 0;//不合法 赋的值应该是符号常量 如果int值是有效的,可以通过强制转换来赋值给变量: band = spectrum(2); 10.指针和自由存储空间(heap 堆) a. cout显示地址时是16进制数 b. 用 new 来申请内存,返回的是地址 格式: typeName * pointer_name = new typeName c. 用 delete 来释放内存 格式: delete pointer_name d. 动态数组的创建与释放 格式: typeName * pointer_name = new typeName[num_elements] 下面两组应当对应 int * pt = new int; delete pt; int Size; cin >> Size; int * ps = new int [Size]; delete [] ps;//否则只是释放了指针指向的元素 注: 对动态数组的地址变化 例如: ps = ps + 1 ,那么 ps[0] 便为原来的 ps[1] 11.三种储存方式: a.自动储存 auto b.静态储存 static c.动态储存 new 和 delete 12.数组的替代品 Ⅰ. 模板类 vector 格式: vector<typeName> vt(n_elem) Ⅱ. 模板类 array (C++11) 格式: vector<typeName,n_elem> arr 注:都可用标准数组法来访问每个元素,其中array和数组一样存放在栈(stack)中, 而vector 存放在堆(heap)中 两中访问方式 vt[21] 等价于 vt.at(21) 但是使用成员函数at() 会花费更多的时间检测是否合法
vector 使用方法 http://blog.csdn.net/hnust_V/article/details/51917852
string 使用方法 http://blog.csdn.net/hnust_v/article/details/51916666
相关文章推荐
- c++ vector用法(转)
- 为什么java效率比c/c++低?为什么用jni调用效率高?
- c语言运算符的优先级和结合性
- LeetCode 368: Largest Divisible Subset
- C语言学习之路
- 关于C语言中printf输出字符串的问题!字符串须以'\0'作为结尾。
- C语言的 NULL是什么
- C++的境界
- 蓝桥杯:指数运算
- 【USACO2.4.2】穿越栅栏
- JNI在C++与java间传递各种数据格式举例
- 【C语言】对5个国家的名称进行排序详细解析
- 结构体指针变量与结构体成员指针变量
- 二维数组与二维指针
- c语言: 文件io, 拷贝文件(二进制)
- c++中const的使用
- 【7.13考试第二题】RQNOJ190 拦截匪徒
- CCNU ACM 2016夏季集训·day4模拟赛(!!!)
- C语言文件的编译到执行的四个阶段
- 理解c指针(初级版)