如何在构造函数中编辑2D矢量

时间:2012-09-26 21:37:41

标签: c++ vector matrix initialization

感谢所有帮助,我已将初始化移至构造函数,但是,我在定义2D向量时遇到困难:

这就是我所做的:

private:
        vector < vector <int> > Matrix;
        vector < vector <int> > temp_m;
        vector <int> elements
        string input;
        int value;
function()
{
//Initialize Both Matrices (one which holds the puzzle and the
//other which holds the values between 1 and 9
//Create a vector of vectors:
for(int i = 0; i < 9; i++)
    elements.push_back(i+1);
for(int i = 0; i < 9; i++)
    Matrix[i].push_back(elements);  //ERROR HERE
}

我在定义2D矩阵的行中出现错误。我想将矩阵推回到其索引中,因为它是一个矩阵矩阵。

3 个答案:

答案 0 :(得分:4)

“行”的声明及其构造不在同一个地方。构造属于初始化列表:

class MyClass
{
public:
    MyClass::MyClass()
      : row(9,0), elements(9)
    {
    }

private:
        vector < vector <int> > Matrix;
        vector < vector <int> > temp_m;
        vector <int> row;
        vector <int> elements;
        string input;
        int value;
}

如果您对成员变量有任何其他特殊大小或初始化,则需要构造参数(例如上面的Matrix和temp_e)也属于初始化列表。

答案 1 :(得分:2)

这是不合法的(无论如何,在C ++ 11之前是无效的,C ++ 11中有变化,但我不确定具体的规则)。您可以在构造函数初始化列表中指定它:

A::A() : row(9, 0), elements(9) {}

并改为:

private:
    vector<int> row;
    vector<int> elements;

答案 2 :(得分:2)

尝试从声明中删除(9 , 0)。在C ++中,您不能从类变量声明中调用构造函数。您需要使用初始化列表从类构造函数中执行此操作。