这是C++类重新复习学习笔记的第 一 篇,同专题的其他文章可以移步:https://www.jianshu.com/nb/39156122
基本的内置数据类型
基本数据类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
基本的数据类型可以使用如下的四种修饰符修饰:
signed
unsigned
short
long
类型别名
使用typedef
为某种数据类型起一个别名:
typedef typerName newTypeName
转义序列
字符名称 | C++代码 |
---|---|
换行符 | \n |
水平制表符 | \t |
垂直制表符 | \v |
退格 | \b |
回车/返回行首 | \r |
振铃 | \a |
反斜杠 | \ |
问号 | ? |
单引号 | ' |
双引号 | '' |
复合数据类型
数组
数组的声明与初始化方式
int array[3];array[0] = 1;array[1] = 2;array[2] = 3;
int array[3] = {1,2,3}
int array[5] = {1,2} // 1,2,0,0,0
int array[5] = {0} // 0,0,0,0,0
int array[] = {1,2,3} // size of the array is 3
获取数组长度:
sizeof array / sizeof (int)
字符串
C风格的字符串
使用char数组存储字符串:一种C风格的字符串表达形式,需要使用 '\0'
做结尾才可以成为一个字符串
char string1[5] = {'h','e','l','l','o'}; // not a string
char string1[6] = {'h','e','l','l','o','\0'}; // a string
char string2[6]="hello"; // '\0'可以被编辑器理解到并自行添加到末尾
char string3[] = "hello"; // 编辑器可以自己确定数组的大小(6)
获取一个C风格字符串的长度(不包括末尾的\0):strlen(string1)
字符串的输入
已知:char hello[20];
-
cin >> hello
:cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,也就是说在cin读取到任何空白的时候都会结束输入,将剩余的部分保留在输入队列(输入流)中等待下一个输入命令来读取,(注意cin会读取掉该空白符,即空白符不再留在输入队列中),所以使用cin只能读取相应大小(比如此处的20)以内并且不含有空白符的字符串 -
cin.getline(hello,20)
:面向行的输入,它使用回车键输入的换行符来确定输入结尾,第二个参数表示其最多读取的字符个数+1后的值,即此处最多读取19个字符,所以这种方法读取指定长度的字符后或者遇到换行符后结束读取。 -
cin.get()
:-
cin.get(hello,20)
:和cin.getline(hello,20)
效果相同,唯一不同的地方是,cin.get()
会将读取到的换行符保留在输入流中,不是将其读入或者丢弃。此时如果进行下一次cin.get()
或者是cin.getline()
都会使得被保留的换行符结束它们,使得他们什么都读不到(除了那个被保留在输入队列队首的换行符)。 -
cin.get(hello,20); cin.get(); cin.get(hello,20);
:在使用完一次cin.get(arrayName,arraySize)
后再次使用cin.get()
将那个换行符读进来可以解决这个问题。 -
cin.get(hello,20).get()
:上一种方法的简写 -
(cin >> something).get()
:在cin
后追加get()
的简写 - 同理,
cin,getline(hello,20).getline(hello,20)
:连续使用cin.getline()
读取两次的简写模式
-
string类
使用 string 类前必须包含 string 头文件:#include
string的声明与初始化
string myString;
string myString = "hello world!";
string mystring = {"hello world!"};
string myString1 = "hello world!";string myString2 = myString1;
string的赋值、拼接与附加
string myString1 = "hello world!";string myString2 = myString1;
string myString3;
myString3 = myString1 + myString2;
myString1 += myString2;
string类输入
getline(cin,stringName)
结构体(struct)
结构体的定义
struct structType
{
dataType dateName1;
dataType dataName2;
};
结构体的声明与初始化
structType structName1;
structType structName1 = {data1,data2};
structType structName2 = structName1;
structName1.dataName1 = data1;
- 在定义完结构体后直接声明一个结构体:
struct structType
{
dataType dateName1;
dataType dataName2;
}structName={
data1,
data2
};
- 只声明一个结构,可以不提前定义结构体:
struct
{
dataType dateName1;
dataType dataName2;
}structName;
结构体数组
假设已经定义了结构体结构:
struct structType
{
dataType dateName1;
dataType dataName2;
};
初始化一个结构体数组:
- 先声明再逐个初始化
structType structArrayName[2];
structArrayName[0]={data1,data2};
- 声明的同时初始化
structArrayName[2]=
{
{data1,data2},
{data1,data2}
};
共用体(union)
共用体和结构体类似,但是不同点在于结构体可以同时存储多种数据结构,但是共用体只能在同一时间存储一种数据结构:
union myUnion
{
int myInt;
double myDouble;
};
myUnion union1;
union1.myInt = 1; // 此时union1存储的是整数1
union1.myDouble = 1.1; // 此时union1存储的是双精度的浮点数1.1
枚举(enum)
枚举的声明
enum colors {red,blue,green,yellow}; // red=0, blue=1, green=2, yellow=3
colors myColor = red; // myColor = 0
colors myColor = colors(2) // myColor = green = 2
即枚举变量只能付给已经定义的几个值中的一个,不能赋予其他值
枚举的值
- 可以在每一个枚举变量后为其赋值,如果没有赋值的话该枚举值是前一个值+1
enum numbers {one=1, two=2, four=4, eight=8}
enum numbers {one=1, two=2, four=4, five, eight=8} // five = 5
- 枚举的值实际上定义了一个范围,比如
enum numbers {one=1, two=2, four=4, eight=8}
中,如下的语句是合法的:
numbers myNumber = numbers(6);
虽然6没有被定义,但是却在定义的枚举值的范围内,是合法的。
枚举值的范围的计算方式:
- 计算上限:找到定义的枚举值的最大值(比如100);找到比这个最大值大的最小的一个2的幂(比如比100大的最小的是2的7次幂128);将这个2的幂数减一(127)即为上限
- 计算下限:
- 如果已经定义的枚举值的最小值比0大或等于0,则下限是0
- 如果已经定义的枚举值的最小值比0小,则和计算上限的方式类似:先找到比这个定义的最小值(比如-6)小的,最大的2的次幂(-8);将这个次幂数加一(-7)即为下限
vector模板类
使用vector模板类需要引入头文件:#include
vector
可以存储n个(n可以为变量)该类型的数据:
vector vt(dataSize); // dataSize大小的dataType数据类型的对象
vector vi; // 0大小的整型数组
- 优点:可以动态改变长度
- 缺点:效率比数组稍低
array模板类
使用array模板类需要引入头文件:#include
array
模板类可以存储固定长度的某种数据类型的一个数组:
array arrayName;
array arrayInt; // 创建一个5个int值的数组对象
array arrayDouble = {1.1,1.2,1.3}; // 创建并初始化了一个3个double值的数组对象
- 有点:效率较快
- 缺点:只能声明固定长度的数组
二维数组
dataType arrayName [row] [column]=
{
{datas},
{datas}
};
dataType arrayName [row] [column];
for(int i = 0; i < row; i++)
{
for(int j = 0; j < column; j++)
{
arrayName[i][j]=data;
}
}
转载请注明出处,本文永久更新链接:https://blogs.littlegenius.xin/2019/08/04/【C-温故知新】一数据类型/