1

我有这个结构

struct myStruct {
    int a;
    int b;
    }

我想创建一个vector <vector<myStruct> > V并将其初始化为n空向量类型vector<myStruct>

我正在尝试像这样使用填充构造函数

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
4

3 回答 3

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);
于 2013-11-01T13:22:25.223 回答
2

只是省略temp。内部类的构造函数V应如下所示:

MyClass(size_t n) : V(n) {}
于 2013-11-01T13:22:02.540 回答
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) {}
    // ...
};

您使用初始化列表进行这种初始化。

于 2013-11-01T13:23:26.180 回答