首页 > 其他分享 >神必 cpp 语法合集

神必 cpp 语法合集

时间:2023-04-19 20:15:14浏览次数:44  
标签:std reverse iterator ++ mp 迭代 cpp 合集 神必

反向遍历 std::map 的时候删除迭代器

2023.4.19

image

decltype(mp)::iterator p = ++mp.erase(++it.base());
it = std::make_reverse_iterator(p);
demo
#include <bits/stdc++.h>

int main() {
    std::map<int, int> mp{{1, 2}, {3, 1}, {2, 1}};
    for (auto it = mp.rbegin(); it != mp.rend(); ) {
        if (it->first == 2) {
            decltype(mp)::iterator p = ++mp.erase(++it.base());
            it = std::make_reverse_iterator(p);
        } else {
            it ++;
        }
    }
    
    for (auto &[k, v] : mp) {
        std::cout << k << ' ' << v << '\n';
    }
    
    return 0;
}
原理

std::map::erase 要求传入 {, const_}iterator 因此这个情景下的 {, const_}reverse_iterator 不奏效。所以考虑转换成 iterator 之后再 erase,之后再转回 reverse_iterator。根据两种迭代器的对应规则,有:

image

也就是说,直接对反向迭代器 it 调用 std::make_reverse_iterator 得到的并不是期待的,而 std::next(it) 才对应正确的值。

另外要从反向迭代器得到正向迭代器,除了 std::make_reverse_iterator 再翻转一次也可以直接使用 std::reverse_iterator 对应的成员函数 base() 得到。

image

标签:std,reverse,iterator,++,mp,迭代,cpp,合集,神必
From: https://www.cnblogs.com/patricky/p/cppfun.html

相关文章

  • cpp:Double Dimensional Array using vector 2
     //StudentArry.h:此文件包含"StudentArry"类。学生数组成绩显示方法C++14//2023年4月9日涂聚文GeovinDuedit.//(1)vec1.size()就是”二维数组”的行数//(2)vec1[0].size()就是”二维数组”的列数//vector<vector<double>>geovindu#pragmaonce#ifndefSTUD......
  • 园子的现代化建设-新功能:发布合集预览版
    为了方便大家管理系列博文,今天发布一个预览版新功能——合集。您可以在博客后台合集栏目中创建新合集或者在编辑博文时快捷地创建新合集然后可以在编辑时将博文与合集关联或者在合集栏目中选择对应的合集点击关联,然后选择博文加入合集创建合集并关联博文后,博客前台侧边......
  • 华为云新一代iPaaS全域融合集成平台全新升级
    摘要:基于华为十多年的数字化转型实践,华为云通过组装式交付、数智驱动、DevOps、服务化架构、安全可信、韧性6大关键技术助力客户实现应用现代化和高质量增长,华为云新一代iPaaS全域融合集成平台ROMAConnect也应运而生。本文分享自华为云社区《华为云新一代iPaaS全域融合集成平台......
  • 华为云新一代iPaaS全域融合集成平台全新升级
    摘要:基于华为十多年的数字化转型实践,华为云通过组装式交付、数智驱动、DevOps、服务化架构、安全可信、韧性6大关键技术助力客户实现应用现代化和高质量增长,华为云新一代iPaaS全域融合集成平台ROMAConnect也应运而生。本文分享自华为云社区《华为云新一代iPaaS全域融合集成平台全......
  • 图扑数字孪生工厂合集 | 智慧工厂可视化,推动行业数字化转型
    前言图扑软件基于HTML5(Canvas/WebGL/WebVR)标准的Web技术,满足了工业物联网跨平台云端化部署实施的需求,以低代码的形式自由构建三维数字孪生、大屏可视化、工业组态等等。从SDK组件库,到2D和3D编辑,到属性修改,构成了一站式的数据可视化解决方案、形成了一整套实践证明的高效开......
  • 所有可用的和最新的CVE及其PoC合集
    所有可用的和最新的CVE及其PoC合集涉及到的CVE从1999年到2023年,共计75368个CVE.从cvelist中收集CVE的详细信息按年份拆分CVE。使用2种技术查找每个CVE的PoC:   引用       收集每个CVE的引用。       使用ffuf和关键词列表检查它们是否指向......
  • cpp: SQLite
       lib/def:sqlite3.def/machine:ix86    ......
  • 26-组合集成电路-译码器
    译码器1.译码器的概念与分类1.1译码器的概念译码器(decoder):将输入的代码“翻译”成另外一种代码输出。编码器(encoder):将一组编码输入的每一个信号编成一个与之对应的输出代码。译码器将一组二进制数还原为一个数字一个符号,一个信息。比如输入1000,将其翻译为8译码器—输......
  • nvim-dap C++ cpptools
    https://github.com/microsoft/vscode-cpptoolsgccgdblocaldap=require("dap")dap.adapters.cppdbg={id='cppdbg',type='executable',command='c:\\gnu\\tool\\cpptools\\extension\\debugAdapters\......
  • CppDepend2023.1分析
        这是一个.Net程序,使用dotfuscator进行了混淆。虽然混淆了,但是不影响调试,可以直接使用dnspy进行调试。Help>LicenseInformation可以作为调试的入口点。    通过实时调试可以很轻松的找到校验授权的代码,在CppDepend.Core.dll中。可以将其修改为总是返回true。......