C++ primer plus 第四章学习笔记

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存放在堆区中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值