【发布时间】:2014-12-01 13:44:07
【问题描述】:
在 Matlab 中,您可以像这样初始化向量:
>> a = 3;
>> b = 4.6;
>> c = [2, 1.3, a, b]
c =
2.0000 1.3000 3.0000 4.6000
我想在 C++ 中使用类似的语法。具体来说,我有自己的向量类 Vec:
class Vec {
public:
unsigned N; //number of elements
double* e; //array of elements
Vec(unsigned); //constructor
~Vec(void); //destructor
Vec(const Vec&); //copy constructor
Vec& operator=(const Vec&); //copy assignment operator
};
我想这样初始化它:
Vec v;
int a = 3;
double b = 4.6;
v = {2, 1.3, a, b}; //a is converted from int to double
std::cout << "N = " << v.N << std::endl;
std::cout << "v = [" << v.e[0] << ", " << v.e[1] << ", "
<< v.e[2] << ", " << v.e[3] << "]" << std::endl;
这样它就会打印出来:
N = 4
v = [2, 1.3, 3, 4.6]
这可能吗?如果有,怎么做?
有一个类似的问题here,但答案是关于复制构造函数,而不是复制赋值运算符。
【问题讨论】:
-
您可能想了解
std::initializer_list。 -
您可以使用
initializer_list,std::vector已经允许这种语法。 Demo -
我知道
initializer_list,但仍然不知道该怎么做。我尝试了Vec& operator=(const initializer_list<double>);和其他一些东西,但没有奏效。
标签: c++ matlab vector operator-overloading initializer-list