C++数组初始化

数组

数组是一种类似于标准库类型vector的数据结构,但是在性能和灵活性的权衡上又与vector有所不同。与vector相似的地方是,数组也存在类型相同的对象的容器,这些对象本身没有名字,需要通过其所在位置访问。与vector不同的地方是,数组的大小确定不变,不能随意向数组中增加元素。因为数组的大小固定,因此对某些特殊的应用来说程序的运行时性能较好,但是相应地损失了一些灵活性。

显式初始化数组元素

可以对数组的元素进行列表初始化,此时允许忽略数组的维度。如果在声明时没有指明维度,编译器会根据初始值的数量计算并推测出来;相反,如果指明了维度,那么初始值的总数量不应该超过指定的大小。如果维度比提供的初始值数量大,则用提供的初始值初始化靠前的元素,剩下的元素被初始化默认值。

const unsigned sz = 3;
int a1[sz] = {0, 1, 2};	// 含有3个元素的数组,元素值分别是0,1, 2
int a2[] = {0, 1, 2};	// 维度是3的数组
int a3[5] = {0, 1, 2};	// 等价于a3[] = {0, 1, 2, 0, 0}
string a4[3] = {"hi", "bye"};	// 等价于a4[] = {"hi", "bye", ""}
int a5[2] = {0, 1, 2};	//错误:初始值太多!

字符数组的特殊性

char a1[] = {'c', '+', 'c'};	// 列表初始化,没有空字符
char a2[] = {'c', '+', '+', '\0'};	// 列表初始化,含有显式的空字符
char a3[] = "c++";	// 自动添加表示字符串结束的空字符
const char a4[6] = "Deniel";		// 错误:没有空间可存放空字符! 

初始化成员变量的数组

class A {
public:
	A();
private:
	int mArray[5];
	...
}

A::A()
	: mArray{0, 1, 2}	// 等价于mArray[] = {0, 1, 2, 0, 0}
{
}

你可能感兴趣的:(C++,c++,数组)