17.10.20
标准模板库(Standard Template Library)的组成:
一.容器:vector ,list,set,map等类
容器又分为:
1. 序列式容器,可进行迭代操作
2. 关联式容器,可用来进行快速查找操作。
二.用以操作这些容器类的所谓泛型算法:find(),sort(),replace(),merge()
所谓泛型,是因为其所提供的function和他们想要的操作元素类型无关,比如int,string
,double都无所谓,都可以进行操作,而且,对于是容器还是数组也一样。
下标操作符:
左操作数运算,接的是首地址,数组的a[1]的实质就是,a为首地址,[1]内是索引偏移量,
自动移位找到偏移的那个地址,并读出那个数,这就是下标操作符的作用。例如:
Cout<<a[3]; //输出3
a[]={...}
Ptr = a;
Cout<<*(ptr+3); //输出3
以上两个操作是相同的。
这里需要注意的是,假设ptr的物理地址是20H,加1后是不是就是21H了呢?
不是的,这里的加1是地址索引,而不是物理地址,物理地址是多少需要根据,
你的变量类型来确定的,比如,如果是int型的,在一般的操作系统环境中,
应该是4bit,所以为24H。
List容器
以一组指针相互链接,使用前向(forward)指针来寻址下一个元素(next),使用
后向(backward)指针来寻址上一个元素(preceding)。
那么,也就是说,指向容器的指针的算数运算是不适用于list的,因为它不是连续地
存储在一起的,而是它的元素之中本身就包含着索引上一个元素和下一个元素的指针。
17.10.21
指针的使用补充
在局部域中定义的一个指针ptr,该指针是在栈中定义的,没有指向,或者指向某个地方,但是指向也是栈,在程序结束的时候系统会自行回收,此时你不new你可以用这个指针干啥呢?你可以用它来指向一个已经明确的地址或者指针,然后操作该指针,就相当于操作指向的地方。然后另外一个用法就是new了,new一个空间是在堆上的,需要自己手动释放,不然会一直占用这个空间。