首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为vector<vector<>分配内存

为vector<vector<>分配内存
EN

Stack Overflow用户
提问于 2014-06-22 11:24:22
回答 1查看 89关注 0票数 0

我正在编写一个类,其中我需要一个2D数组,并希望使用2D向量。但是,我需要首先将2D数组声明为私有,然后在构造函数中分配内存。当我这样做时,我得到了一个“调用类类型的对象而没有适当的操作符()或将函数转换为指针到函数类型”的错误。有人能帮我吗?

代码语言:javascript
复制
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));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 11:28:59

DynTable是一个变量。您的代码就像执行以下操作:

代码语言:javascript
复制
int y;
y(5);

表达式变量名(表达式)意味着调用函数。但是yDynTable不是函数,因此出现了错误。

我想你是想用一个初始化程序列表:

代码语言:javascript
复制
Test(const string &s1, const string &s2)
    : DynTable( s1.size() + 1, vector<unsigned int>(s2.size() + 1) )
{
    // other code here perhaps
}

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

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

代码语言:javascript
复制
DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1));

但是,这更糟糕,因为它更多的是键入,它执行默认的构造,然后执行赋值,而不是直接构造所需的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24350756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档