为vector <vector <>&gt;分配内存简短的方法</vector <>

时间:2014-06-22 11:24:23

标签: c++ arrays vector

我正在编写一个我需要2D数组并想要使用2D矢量的类。但是,我需要首先将2D数组声明为私有,然后在我的构造函数中分配内存。当我按照以下方式进行操作时,我得到“没有适当的operator()或类型转换函数的类型对象的调用”指针到函数类型“错误。有谁可以帮助我?

class Test {

private:
    vector<vector<unsigned int> > DynTable;

public:
    Test(const string &s1, const string &s2) {
        const size_t len1 = s1.size(), len2 = s2.size();
        DynTable(len1 + 1, vector<unsigned int>(len2 + 1));

1 个答案:

答案 0 :(得分:4)

DynTable是一个变量。你的代码就像在做:

int y;
y(5);

表达式 variablename ( 表达式 )表示调用函数。但是yDynTable不是函数,因此是错误。

我认为您打算使用ctor-initializer列表:

Test(const string &s1, const string &s2)
    : DynTable( s1.size() + 1, vector<unsigned int>(s2.size() + 1) )
{
    // other code here perhaps
}

在ctor-initializer列表中,它不是表达式,而是初始化语法。在初始化列表的上下文中,( )分隔参数用于初始化变量。

另一种选择是在构造函数体中编写

DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1));

然而这更糟糕,因为它更多的是打字,它会做一个默认的构造,然后是一个赋值而不是直接构造你想要的东西。