c++ - 最终迭代器递减的应用及其含义

标签 c++ stl iterator

int get(int key) {
        if (m.count(key) == 0) return -1;
        freq[m[key].second].erase(iter[key]);      
        freq[m[key].second].push_back(key);        
        iter[key] = --freq[m[key].second].end();   
        if (freq[minFreq].size() == 0) ++minFreq;
        return m[key].first;
}

private:
    int cap, minFreq;
    unordered_map<int, pair<int, int>> m;
    unordered_map<int, list<int>> freq;
    unordered_map<int, list<int>::iterator> iter;
我发现了一系列针对Leetcode问题的解决方案代码。让我想知道在这种情况下,最终迭代器递减实际上意味着什么,以及何时编码时使用这种格式的时机。作为C++初学者,我认为只要坚持下去,那会很棒iter[key] = freq[m[key].second].end();但是-真的让我感到困惑。在上下文中,我们应该找到LFU缓存,并且该行应在频率列表中找到值的相应位置。

最佳答案

list<int> li;
li.push_back(1);
li.push_back(2);
li.push_back(3);
li.begin()-指向ist元素的指针(作为引用li[0])。li.end()-指向null的指针(紧接在最后一个元素li[2]之后的元素)。--li.end()-指向最后一个元素的指针(li[2])。 //你的问题li.rend()-指向第一个元素之前(li[0]之前)的元素的指针。li.rbegin()-指向最后一个元素的指针(li[2])。rbegin()rend()是反向迭代器,您可以从geeksforgeeks了解更多有关它们的信息。

关于c++ - 最终迭代器递减的应用及其含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64327678/

相关文章:

c++ - 处理 utf-8 字符串 gtk

c++ - 为什么这个简单的线程代码会失败?

python - 在 Python 中按排序顺序从排序的迭代器中产生?

c++ - 候选模板被忽略 : could not match 'pair<type-parameter-0-0, type-parameter-0-1>' against 'const Point'

c++ - 检查用户输入时数组元素值是否已经存在

c++ - 为什么这个函数被标记为noexcept,但可以抛出?

c++ - 我可以通过添加一个数字来增加一个迭代器吗?

c++ - GCC 在 Debug模式下崩溃,在 Release模式下运行良好?

c++ - 与 std::vector 的元素进行组合

objective-c - Rust Cocoa - 如何迭代 NSArray