搜索
您的当前位置:首页正文

实习冲刺练习 第二十八天

来源:榕意旅游网

每日一题

LRU缓存

class LRUCache{
private:
    int _capacity;
    list<pair<int, int>> res;//双向链表
    unordered_map<int, list<pair<int, int>>::iterator> map;
public:
    LRUCache(int capacity) : _capacity(capacity) {}

    int get(int key) {
        if (map.count(key) == 0)return -1;
        res.splice(res.begin(), res, map[key]);//调整位置

        return map[key]->second;
    }

    void put(int key, int value) {
        if (get(key) == -1) {
            if (res.size() == _capacity) {
                map.erase(res.back().first);//删除长时间没使用的元素
                res.pop_back();
            }
            res.push_front({ key,value });//新进的元素要放在头部
            map[key] = res.begin();//指针初始化
        }
        else {
            map[key]->second = value;
        }
    }
};

八股

移动语义和拷贝语义有什么区别?

什么是 C++ 中的智能指针?有哪些类型的智能指针?

智能指针是 C++ 提供的一种对象,用于自动管理动态分配的内存资源。它通过 RAII(资源获取即初始化)的方式,在对象生命周期结束时自动释放内存,避免手动调用 delete 导致的内存泄漏或重复释放问题。

智能指针通常封装了原始指针,提供类似指针的行为,同时附加了资源管理功能。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top