向量和数组
class vector
{
int sz; //大小
double* elem; //指向元素的指针
public:
vector(int s) //构造函数
:sz{s},elem{new double[s]} {/*...*/} //分配内存
~vector() //析构函数
{delet[] elem;} //释放内存
}
class vector
{
int sz; // 大小
double* elem; //指向元素的指针
public:
vector(int s) //构造函数(s为元素数量)
:sz{s},elem{new double[sz]} //为元素分配未初始化的内存
{
for(int i=0; i<sz; ++i) elem[i]=0.0;//初始化
}
vector(initializer_list<double>lst) // 初始化器列表构造函数
:sz{lst.size()}, elem{new double[sz]} //为元素分配未初始化的内存
{
copy(lst.begin(), lst.end(), elem); // 初始化
}
};
vector v1={1,2,3}; //三个元素1.0,2.0,3.0
vector v2(3); //三个元素,都具有(默认值)0.0
vector v1 {3}; //一个元素,值为3.0
vector v2(3); //三个元素,都具有(默认值)0.0
如果有多个构造函数可供选择,编译器会将{}列表中的一个值解释为一个元素值,并将它作为一个initializer_list
的元素传递给初始化器列表构造函数。
vector v11={1,2,3}; //三个元素1.0,2.0,3.0
vector v12={1,2,3}; //三个元素1.0,2.0,3.0
两个定义只是风格上的不同
注意,我们是按传值方式传递initalizer_list<double>的。我们故意这样做的,这也是语言规则所要求的
:一个initializer_list只是指向分配在“别处的”元素的句柄。