c++ - 如果参数中没有传递任何值,如何创建具有默认值的对象?

标签 c++ class constructor

我正在尝试创建一个表,如果没有值传递给构造函数,它将默认大小为 500。

示例

Table object; //sets table size to 500 by default
Table object(10000); //sets table size to 10000

这就是我目前设置标题的方式:

Class Table{
public:
    Table();
    //other functions excluded
private:
    static const int tableSize = 500;
    std::vector<int> A[tableSize];
}; 

我该怎么做?

最佳答案

假设您想要一个表格而不仅仅是一个序列,这可能就是您要找的东西。您的代码没有提及该表中每个的大小,所以我将使用您拥有的内容:

class Table
{
public:
    Table(size_t n = tableSize) : A(n) {};

    //other functions excluded
private:
    static const size_t tableSize = 500;
    std::vector< std::vector<int> > A;
};

如果行缓冲区的大小是固定的(比如说 100 列),您可以使用 std::array<>对于您的行缓冲区,因此改为:

class Table
{
public:
    Table(size_t n = tableSize) : A(n) {};

    //other functions excluded
private:
    static const size_t tableSize = 500;
    std::vector< std::array<int,100> > A;
};

编辑:扩展您的哈希表

从评论看来,这是为了提供哈希表实现,这样做需要扩展哈希表(可能首先是一个原因)。这样,您可以结合第一个片段直接扩展原始内容:

void Table::expand()
{
    size_t new_size = 2*A.size() + 1;
    std::vector< std::vector<int>> tmp(new_size);
    for (auto& x : A)
    {
        std::hash<int> hfn;
        for (auto y : x)
            tmp[hfn(y) % new_size].push_back(y);
    }
    std::swap(A,tmp);
}

或类似的东西。您的哈希函数显然需要适当的集成以及可能采用可选的大小因子等,但您有望理解这个想法。

关于c++ - 如果参数中没有传递任何值,如何创建具有默认值的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23022813/

相关文章:

c++ - 为什么将 const 类型的智能指针转换为类型有效的智能指针

c++ - 让一个类的实例搜索另一个类中的数组

android - pthread_unlock_mutex 不唤醒等待线程

c++ - 静态函数中的非静态参数

Java:类.this

javascript - 来自构造函数的 HTML 元素标签名称

c++ - 指针值未正确传递给重载的等于运算符 (C++)

javascript - typescript :如何将对象映射到类型?

JavaScript new Function 表达式和 new Function 构造函数

java - 无法实现构造函数(隐式 super 构造函数 Item() 未定义)