RHong20 2023-06-18 14:34 采纳率: 100%
浏览 28
已结题

Cpp关于static关键字的问题

Cpp关于static关键字的问题

Leetcode 706. 设计哈希映射。
为什么base和hashfunc需要设置为static,不然就会报错(报错内容附下)。static在这里起了什么作用?

class MyHashMap {
public:
    vector<list<pair<int,int>>> data;
    static const int base = 769;//为什么必须使用static?
    static int hashfunc(int k){
        return k % base;
    }
    MyHashMap(): data(base) {

    }
    
    void put(int key, int value) {
        int adr = hashfunc(key);
        for(auto it = data[adr].begin();it!=data[adr].end();it++){
            if(it->first == key){
                it->second = value;
                return;
            }
        }
        data[adr].push_back(make_pair(key, value));
    }
    
    int get(int key) {
        int adr = hashfunc(key);
        for(auto it = data[adr].begin();it!=data[adr].end();it++){
            if(it->first == key){
                return it->second;
            }
        }
        return -1;
    }
    
    void remove(int key) {
        int adr = hashfunc(key);
        for(auto it = data[adr].begin();it!=data[adr].end();it++){
            if(it->first == key){
                data[adr].erase(it);
                return;
            }
        }
        return;
    }
};

执行出错信息:
terminate called after throwing an instance of 'std::length_error'
  what():  cannot create std::vector larger than max_size()
最后执行的输入:
["MyHashMap","put","put","get","get","put","get","remove","get"]
[[],[1,1],[2,2],[1],[3],[2,1],[2],[2],[2]]
  • 写回答

2条回答 默认 最新

  • 关注

    简单说, 构造一个对象的顺序是从上到下, data在base前, 却要用base的值, 那么基本就是个垃圾值,
    *
    而加了static, 意味着base属于类不属于对象, 那么它自类声明起, 就已经产生, 于是你在构造对象时data可以用正确的base值了.
    *
    至于hash函数, 是不是static我没看出有什么区别.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月27日
  • 已采纳回答 6月19日
  • 创建了问题 6月18日

悬赏问题

  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格
  • ¥15 kali linux用wget archive.kali.org/archive-key.asc指令下载签名无效(失败)