如何使用包含n个元素的列表初始化构造函数?
X x = {4, 5, 6, ...};
答案 0 :(得分:7)
对于包含n个元素的列表,您需要使用std :: initializer_list。
Initializer_list对象自动构造为数组 分配了类型T的元素,其中每个元素都在 列表被复制初始化为数组中的相应元素, 使用任何必要的非缩小隐式转换。
举个例子:
#include <iostream>
#include <initializer_list>
#include <vector>
template<class T>
class X {
long unsigned int size;
std::vector<T> _elem;
public:
X(std::initializer_list<T> l): size{l.size()} {
for(auto x: l)
_elem.push_back(x);
}
void print() {
for(auto x: _elem)
std::cout << x << " ";
}
};
int main(int argc, char **argv) {
X<int> x = {4, 5, 10 ,8 ,6};
x.print();
return 0;
}
有关std :: initializer_list的更多信息: http://www.cplusplus.com/reference/initializer_list/initializer_list/
答案 1 :(得分:2)
您是否在询问如何制作一个接受initializer_list
的构造函数?
#include <initializer_list>
class X {
public:
X(std::initializer_list<int> ilist);
};
答案 2 :(得分:2)
您可以定义所谓的 初始化列表构造函数 ,并使用类std::initializer_list
的迭代器来访问列表中的元素。
根据C ++标准
初始化列表构造函数,如果其第一个参数是类型 std :: initializer_list或对cv-qualified的引用 某些类型E的std :: initializer_list,并且没有 其他参数或所有其他参数都有默认参数
例如
#include <iostream>
#include <vector>
#include <initializer_list>
class A
{
public:
A() = default;
A( std::initializer_list<int> l ) : v( l ) {}
std::vector<int> v;
};
int main()
{
A a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for ( int x : a.v ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}