我有这个结构
struct myStruct {
int a;
int b;
}
我想创建一个vector <vector<myStruct> > V
并将其初始化为n
vector<myStruct>
类型的空向量
我正在尝试使用fill constructor 像这样:
vector<edge> temp;
vector<vector<edge> > V(n, temp);
此代码在main
中工作正常,但是当我在类中有V
时,我怎么能在类构造函数中执行此操作。
修改
当我在我的类构造函数中执行它时,我得到以下错误:
no match for call to '(std::vector<std::vector<edge> >) (int&, std::vector<edge>&)'
产生错误的代码是:
vector<myStruct> temp;
V(n, temp); // n is a parameter for the constructor
答案 0 :(得分:3)
首先,请注意temp
不是必需的:您的代码与
vector<vector<edge> > V(n);
现在回答你的主要问题:当你的向量在一个类中时,如果成员是非静态的,则使用初始化列表,或者如果它是静态的,则初始化声明部分中的成员。
class MyClass {
vector<vector<edge> > V;
public:
MyClass(int n) : V(n) {}
};
或者像这样:
// In the header
class MyClass {
static vector<vector<edge> > V;
...
};
// In a cpp file; n must be defined for this to work
vector<vector<edge> > MyClass::V(n);
答案 1 :(得分:2)
只需省略temp
即可。 V
所在类的构造函数应如下所示:
MyClass(size_t n) : V(n) {}
答案 2 :(得分:0)
class A
{
private:
std::vector<std::vector<myStruct>> _v;
public:
A() : _v(10) {} // if you just want 10 empty vectors, you don't need to supply the 2nd parameter
A(std::size_t n) : _v(n) {}
// ...
};
您使用初始化程序列表进行此类初始化。