1.数组
数组是用于存储多个同类型的数据的数据格式
数组的初始化方法如下
int ary[3] = {1,2,3};
int ary1[3] = {}; //所有元素设置为0
int ary2[3] {1,2,3};//c++11数组初始化方法
2.字符串
字符串是存储在内存的连续字节中的一系列字符。
字符串初始化方式如下
char wod[] = "hello world"; //让计算机计算数组元素
//C++中初始化字符串时,会自动在结尾加上/0
//在数组中使用字符串时,可以用strlen()来返回存储在数组中字符串的长度,用以赋给另外一个数组,数组的size不能小于strlen(ex) + 1,同时sizeof()可以显示出数组的长度
使用cin来输入字符串时,不能输入例如 hello world 的字符串,因为cin是以空白确定字符的结束位置并自动添加空字符,为了读取一行的输入,可以使用cin.getline(变量名,数组长度)或者cin.get(变量名,数组长度)。
3.string类
使用string类,必须包含头文件string
string的初始化
#include<string>
string str1 = "good";
string str2 = {"bad"};
string str3 = str1 + str2;//拼接操作
可以通过strcpy(str1,str2)来把str2复制到str1里去,strcat(str1,str2)将str2拼接到str1后面。
4.结构体
类似于class
struct str
{
char name;
int age;
int weight;
}
str str1 = {"tom",19,80};
//c++11支持str str1 {"tom",19,80};
cout << str1.name;
cout << str1.age;
cout << str1.weight;
str结构也可包含数组,用来存放多个str结构。初始化如下:
str st[2] = {{"peter",8,40},{"luios",2,5}};
5.共用体union
类似于struct,但是只能存储int,long,double类型的数据。
当数据项使用两种或者多种格式的时候(不同时使用),可以节省空间。
6.指针与自由存储空间
指针用于指向一块内存,并且可以操控这块内存内的数据。通过*就可以得到指针的值,指针所占大小为4个字节。
注:在对指针解除引用之前初始化为一个确定的地址。
6.1new与delete
new与delete最好同时使用,方式内存的泄露。
通过new可以用于为指针分配一片内存,即将一片地址赋给指针,new从堆区分配内存(或自由存储区),正常变量存储在栈区。
typename *p = new typename;
new也可用于创造动态数组,同时用另一种形式的delete来释放。
int *p = new int [10];
delete [] p;
//*(p+1)与 p+1等价 数组名为第一个元素的地址
//当使用结构体指针时,p->name = *p.name
int *p1 = new int;
delete p1;
当把指针当数组使用的时候,p[0]与*p均为第一个元素,对于第二个元素可以用p[1]。即对于指针和数值名,可以用指针表示法也可以数组表示。
当p+1时,*p与p[0]指向第二个元素,将其-1可以给delete [] 提供正确的地址。
若指针数组指向为int类型,则+1时地址增加4,double则增加8。
7.数组类的替代品
7.1 vecto
vector自动使用new与delete来管理内存。
1.vector的构造函数
函数原型:
1.vector<T> v ; //使用模板类,默认构造函数
2.vector(v.begin(),v.end()); //将[v.begin(),v.end())区间中的元素拷贝给本身
3.vextor(n,elem); //将n个elem拷贝给本身
4.vector(const vector &v) ; //拷贝构造函数
7.2 array
与vector不同,array对象与数组存放在栈区中,而vector存放在堆区中。