C++ Primer笔记(6)

与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。数组没有获取其容量大小的size操作,也不提供push_back操作的其中自动添加元素。如果需要更改数组的长度,程序员只能创建一个更大的新数组,然后把原数组的所有元素复制到新数组空间中去。


现在C++程序更多地使用vector来取代数组,只有当性能测试表明使用vector无法达到必要的速度要求时,才使用数组。

数组是由类型名、标识符和维数组成的复合数据类型,类型名规定了存放在数组中的元素的类型,而维数则指定数组中包含的元素个数。


指针----用于指向对象。
建议:尽量避免使用指针和数组。
避免使用未初始化的指针。
如果可能的话,除非所指向的对象已经存在,否则不要先定义指针,这样可避免定义一个未初始化的指针。

如果必须分开定义指针和其所指向的对象,则将指针初始化为0,。因为编译器可检测出0值的指针,程序可判断该指针并未指向一个对象。


void*指针:
它可以保存任何类型对象的地址。只支持几种有限的操作:与另一个指针进行比较;向函数传递void*指针或从函数返回void*指针;给另一个void*指针赋值。

指针的算术操作:指针加上(或减去)一个整形数值n等效与获得一个新指针,该新指针指向指针原来指向的元素之后(或之前)的第n个元素。


数组类型的变量有三个重要的限制:数组长度固定不变,在编译时必须知道其长度,数组只在定义它的块语句中存在。
动态分配的数组将一直存在,直到程序动态的释放它为止。

每一个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区或堆。C语言一般用malloc和free,C++一般用new和delete。


int *p=new int[10]();//数组会初始化为0
int *p=new int[10];//数组不会进行初始化
delete [] p;//释放
string st3("Hello World");

char *str=st3.c_str();//返回c风格字符串的表示方法。


使用数组初始化vector
const size_t arr_size=6;
int int_arr[arr_size]={0,1,2,3,4,5};
vector<int> ivec(int_arr,int_arr+arr_size);

vector<int> ivec(int_arr+1,int_arr+4);//int_arr[1],int_arr[2],int_arr[3]


C++没有多维数组,通常所指的多维数组其实就是数组的数组。

你可能感兴趣的:(C++ Primer笔记(6))