c++数组初始化总结

静态数组:

//一维数组
int a[10];//定义了长度为10的数组,并未对值进行初始化
int a[10]={};//定义了长度为10的数组,并将所有值初始化为0
int a[10] = {1,2};//定义了长度为10的数组,前两个位置初始化值为1,2,其余位置初始化值为0
//二维数组
int a[10][9];//定义了10×9的数组,并未对值进行初始化
int a[10][9]={};//定义了10×9的数组,并将所有值初始化为0
int a[10][9]={{1,2}{1}};//a[0][0]初始化为1,a[0][1]初始化为2,a[1][0]初始化为1,其余所有初始化为0

动态数组:

一维数组:

int *a = new int[5];//定义了动态数组,并未初始化值
int *a = new int[5]();//定义了动态数组,初始化全部值为0
int *a = new int[5]{};//定义了动态数组,初始化全部值为0
int *a = new int[5]{1,2}//a[0]初始化为1,a[1]初始化为2,其余值初始化为0
//使用完记得释放内存
delete[]a;

二维数组:

//二维数组,方法一(半截子动态数组,只有行具有动态功能)
int(*a)[5] = new int[4][5]();//定义了4×5的动态数组,全部初始化值为0,{}效果同()
auto a = new int[4][5]();//上面行由此行替代
delete[]a;//释放内存

//方法二(真.动态数组)
int**a = new int*[4];
for (int i = 0; i < 4; i++)
{
    a[i] = new int[5];//未初始化值
}

int**a = new int*[4];
for (int i = 0; i < 4; i++)
{
    a[i] = new int[5]();//初始化所有值为0,()也可换为{}
}

int**a = new int*[4];
for (int i = 0; i < 4; i++)
{
    a[i] = new int[5]{1,2};//初始化第一列值都为1,第二列值都为2,其余所有值为0
}
//释放内存
for(int i=0;i<5;i++)delete[]a[i];
delete[]a;

为啥说int(*a)[5] = new int[4][5]()初始化的数组是半截子动态数组?这里不多讲,只告诉你这里的[5]必须是常数,a[1][6]和a[2][2]地址是一样的,也就是说是同一个数,因为上面说了,这个数组的列不具有动态性,也就是每一行的只能有5个数,每一行是首位相连存储的。如果不清楚指针和数组的关系可以看这里,超详细总结

vector数组:

(1)vector <type> a;    不初始化容器(本文就容器和数组不加区别)大小,即创建一个空容器,之后可以通过push_back向容器后放入元素。

(2)vector <type> a(10);    初始化容器大小(size)为10,如果是int、float等类型,默认初始化值为0,char类型默认初始化值为一个空格,string类型没有初始化值(即使为空容器大小还是为10)。

vector<int> a(10,1);    初始化容器大小为10,值都为1。

(3)vector<int> a={3,4,5,6};    将容器初始化为{3,4,5,6}。

只有vector可以在声明数组之后通过a={ }的方式赋值。


vector使用详见这里

发布了42 篇原创文章 · 获赞 178 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40692109/article/details/104302817
今日推荐