问题更新:
我想在C ++中执行以下操作:
struct Param {
public:
int len;
int in1;
float in2;
};
Param params;
class Element {
private:
int value1;
float value2;
public:
Element();
Element(int n) {value1 = n; value2 = 0;}
Element(int n1, float n2) {value1 = n1; value2 = n2;}
}
class Parent {
private:
class Element elem;
vector<Element> elemVec;
public:
Parent();
Parent(int n);
}
我希望编写以下构造函数,以便在调用Parent
构造函数时,类元素elem
和elemVec
的非默认构造函数也会被调用。我已经发现elem
的构造函数需要调用如下:
Parent::Parent(int n) : elem(n) {
}
我现在如何构造elemVec
向量的每个元素,以便为每个向量元素调用Element(int, float)
构造函数,并从结构中获取int
和float
个值字段params.value1
和params.value2
。 elemVec
的大小需要由结构字段params.len
定义。
在构造函数体中编写循环会给出构造对象的不需要的行为。
答案 0 :(得分:5)
以下实施应该有效。但是,它取决于从int
到Element
的隐式转换,并不是一般解决方案。
Parent::Parent(int n, const vector<int> &numVec)
: elem(n),
elemVec(numVec.begin(), numVec.end())
{ }
答案 1 :(得分:1)
此解决方案可以满足您的需求:
Parent::Parent(int n, const vector<int>& numVec)
: elem(n)
{
elemVec.reserve(numVec.size());
for (auto num : numVec)
elemVec.emplace_back(num);
}
空矢量的默认构造基本上是免费的。
保留分配了vector(n)构造函数所需的完整内存块。
emplace_back尽可能高效地构建项目。