Keep going~
1.string类
- 包含头文件string.h,并提供using编译指令
using namespace std
- 可以用数组表示法来访问存储在string对象中的字符。
- 程序能够自动处理string的大小。
- string对象可以相互赋值
str1 = str2;
- 可以使用+将两个string对象合并起来:
str3 = str1 + str2; //将合并的string赋给str3
str2 += str1; //将str1附近到str2的末尾
strcpy(charr1, charr2); //字符数组复制
strcat(charr1, charr2); //字符数组合并(结果并入charr1)
将第一行输入读取到string对象:
getline(cin, str);
- R原始字符串语义:不对转义字符作处理,也可以使用
"
而非\"
R"(Jim "king" uses "\n" instead of endl.)"
上述代码将显示为:
Jim "king" uses "\n" instead of endl.
用R"+*(...)*+"
可包含"(
和)"
2.结构体:struct
- 外部声明
内部声明
(c++不提倡使用外部变量,但提倡使用外部结构声明) - 可以将结构作为参数传递给函数,函数也可以返回结构。
- 可以使用赋值运算符
=
将结构赋给另一个同类型结构。 - 可同时完成定义结构和创建结构变量的工作。
- 结构数组
inflatable guest[2]=
{
{"Bambi", 0.5, 21.99},
{"Robb", 200, 565.99}
};
- 结构中的位字段。
指定占用特定位数的结构成员。
字段的类型为整型或枚举,接:
再跟一个数字,其指定了使用的位数。
3.共用体:union
- 一种数据格式,能够存储不同的数据类型。但只能存储
int
,long
或double
. - 句法与结构相似
- 用途:当数据项使用两种或更多种格式(但不会同时使用)时,可节省空间。
struct widget
{
char brand[20];
union id
{
long id_num;
char id_char[20];
}id_val;
};
4.枚举:enum
- 枚举量为整型,可被提升为
int
类型
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};
其中spectrum
为新类型,red
,orange
等作为符号常量,对应整数值0~7。
- 设置枚举量的值
enum bigstep { first, second = 100, third};
这里first
的值为默认值0,third
的值为101。
5.指针与自由存储空间
- 自动存储
局部变量,作用域为包含它的代码块(自动变量,通常存储在栈中) - 静态存储(静态变量)
- 在函数外部定义
- 声明变量时使用关键字
static
- 动态存储
new
和delete
管理了一个内存池(自由存储空间或堆)
能够在一个函数中分配内存,而在另一个函数中释放它。
6.类型组合
间接成员运算符。
...
s.year = 1999;
stru_year *pa = &s;
pa->year = 1999; //通过间接成员运算符访问成员,pa为指针。
7.数组的替代品
- 模板类:vector
类似于string类,也是一种动态数组。
是使用new
创建的动态数组的替代品。
#include <vector>
...
using namespace std;
vector<int> vi; //整型空数组
int n;
cin >> n;
vector<double> vd(n); //浮点型长度为n的数组
- 模板类:array(C++11)
与数组一样,长度固定,效率相同。允许对象赋值(数组只能逐个复制)
#include <vector>
...
using namespace std;
array<int,5> ai; //整型长度为5的数组
array<double,4> ad={1.2, 2.1, 3.43, 4.3}; //浮点型长度为4的数组