August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
考虑我们在第12章结束时定义的vector:
这个定义很好,但如果我们希望用一组值初始化向量元素,而不是将它们初始化为默认值,会怎样呢?例如:
我们可以这样做,这比将元素初始化为默认值然后再将我们希望的值赋予它们的方式好得多:
与v1的初始化相比,v2的初始化冗长易错(我们在这段代码中就故意将元素数量弄错了)。如使用push_back(),我们就不必提及vector的大小:
但这种方法仍会产生很多重复代码,那么我们如何编写接受初始化器列表参数的构造函数呢?用{}限定的类型T元素的列表是以标准库类型initializer_list<T>对象(即T的列表)的形式呈现给程序员的,因此我们可以编写如下代码:
我们使用了标准库算法copy(见附录C.5.2)。它将前两个参数(在本例中是initializer_list的起始和结束位置)指定的元素序列拷贝到从第三个参数开始的元素序列(在本例中是从开始elem的vector的元素)中。 ...