c++ - 向类提供 const 变量

标签 c++ class oop templates constants

假设我的哈希表有不同大小的单词,我想在单独的哈希表中跟踪不同大小的单词。不是为 20 个不同的单词大小创建 20 个不同的哈希表文件,有没有办法通过类提供 const?

动态分配不是一个选项,因为它会为每个表条目的指针变量额外花费 8 个字节。

template <//Is there a way to supply a const here to change the value of size?>
class HashTable
{
    static const int size = #;

    struct TableEntry
    {
        char words[size];
    }

}

最佳答案

允许整体模板参数:

template <int Size>
class HashTable ...

(我通常更喜欢 size_t Size ,但您需要包含一个定义它的 header ,例如 <cstddef> )。


另外,Captain Obvlious 有一个很好的观点,即大多数考虑进行此类优化的人实际上并没有需要它们,而只是陷入了概念上的担忧。如果您确实有经证实的需求,关于...

Dynamic allocation is not an option, because it would cost 8 additional bytes for the pointer variable for each table entry.

...还有其他选项,如果您不需要删除元素,则特别容易实现。例如,您可以将文本存储在连续的内存区域中,如...

this\0that\0whatever\0huh\0

...然后将偏移量存储到单个哈希表中的该区域中。如果您知道输入数据不会超过 64k,那么每个偏移量只需要 2 个字节。 4 个字节将允许最多 4GB 的字符串数据。对于更长的单词,您为未使用/空哈希表桶浪费的空间更少,因此它抵消了将文本存储在其他地方的作用。

关于c++ - 向类提供 const 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520414/

相关文章:

C++ 等效于 C# Encoding.ASCII.GetBytes()

c++ - 具有不同类型元素和使用类的二维数组

c++ - 可变参数模板类中的多重继承和调用构造函数

java - 将子类传递给方法但将父类(super class)作为参数?

c++ - 跨平台代码组织

c++ - Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

c++ - 返回指向从文件读取的字符 vector 数据的浮点指针

c++ - 不存在从 std string 到 const char * 的合适转换函数

c++ - 使用 map 容器的字母频率

java - 使用抽象类实现接口(interface)