首页 > 其他分享 >关于map容器的迭代器深入学习

关于map容器的迭代器深入学习

时间:2023-11-24 15:12:04浏览次数:25  
标签:std map end 迭代 容器 second first

#include <iostream>
#include <map>
using namespace std;
int main() {
  std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};

  auto itBegin = myMap.begin();  // 迭代器指向开头位置
  std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  --itBegin;
  if (itBegin == myMap.end()) {
    std::cout << "111" << std::endl;
  } else {
    std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  }
  --itBegin;
  if (itBegin == myMap.end()) {
    std::cout << "222" << std::endl;
  } else {
    std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  }
  --itBegin;
  if (itBegin == myMap.end()) {
    std::cout << "333" << std::endl;
  } else {
    std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  }
  --itBegin;
  if (itBegin == myMap.end()) {
    std::cout << "444" << std::endl;
  } else {
    std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  }
  --itBegin;
  if (itBegin == myMap.end()) {
    std::cout << "555" << std::endl;
  } else {
    std::cout << itBegin->first << ": " << itBegin->second << std::endl;
  }
  return 0;
}

输出结果:

1: one
111
3: three
2: two
1: one
555

要点:

map容器的迭代器是一个cycle,.begin()进行自减操作后,与.end()相同

.end()获取的是最后一个键-值对的下一个位置,里面没有实际内容,因此.end() 返回的迭代器不能用于解引用,否则会导致未定义行为

尝试了在vector上做同样的操作,但是得到的结果不正确

标签:std,map,end,迭代,容器,second,first
From: https://www.cnblogs.com/kimbiao/p/17853778.html

相关文章

  • mapper中limit参数的问题
    通常情况下一般不会用limit进行分页操作,但是在数据量小的情况下使用limit还是挺好的,因为方便。在mapper中操作一般我们都是这样写,看起来没问题,但是跑起来会有问题。因为limit中不支持动态运算符,故在写分页的时候mapper.xml中以下这种写法是错误的://错误写法<selectid="queryPag......
  • Autofac 实现容器注入
    usingAutofac.Extensions.DependencyInjection;namespaceVOL.WebApi{publicclassProgram{publicstaticvoidMain(string[]args){CreateHostBuilder(args).Build().Run();}publicstaticIHostBuilderCreateHos......
  • 在.net中使用AutoMapper进行对象映射,对象相互转,简单方便
    AutoMapper是一种对象映射工具,它可以帮助我们将不同类型的数据对象之间进行相互转换。在.NET中,我们可以使用AutoMapper库来简化数据对象之间的映射操作,从而提高代码的可读性和可维护性。一、AutoMapper的安装和基本使用安装AutoMapper首先,我们需要在项目中安装AutoMapper库。......
  • kubelet热更新configmap
    k8sv1.19.0configmap热更新约束支持热更新:目录方式挂载configmap。不支持热更新:subPath单个文件方式挂载configmap和configmap注入到环境变量。configmap热更新逻辑修改kube-system/configmapcoredns后触发kubelet热更新configmap。pkg/kubelet/volumemanager/reconciler/......
  • Mac中使用sqlmap4burp++
    在mac中使用burp加载插件sqlmap4burp,发现报错:在系统偏好设置--安全性与隐私--隐私--完全磁盘访问权限钩上:......
  • docker和虚拟化,docker安装和配置, 镜像操作,容器操作
    1docker和虚拟化......
  • c++本质:释放内存、new与delete、容器内是指针
    【释放内存】本质:标识符放弃对该内存的占有权。若该内存是栈内存,当所有标识符都放弃,那么系统自动重获占有权。内存依然存在,地址、值都未改变。若该内存是堆内存,当所有标识符都放弃,不delete,那么系统也无法拥有占有权。所以delete让系统重获占有权。内存依然存在,地址未变、值变为......
  • Spring中@Mapper和@Repository的区别与使用
    本文根据文章:https://blog.csdn.net/m0_45210394/article/details/126223145进行修改@Mapper是mybatis的注解,标注在dao层接口上,可以通过动态代理生成接口的实例bean(编译之后能生成相应的接口实现类)@Repository是spring的注解,也标注在dao层接口上,但是@Repository注解只是表明这......
  • ESMapV结合BIM、GIS、三维建模、IOT实现数字孪生智慧桥梁、挠度监测、沉降监测、桥梁B
    前言传统桥梁管养模式陈旧,仍存在数据分散难归口、管养时间人力成本高、病害危情信息异步等弊端现象,潜在安全隐患俨然成为桥梁防护的一颗不定时炸弹。随物联网、信息化、数字孪生技术成熟发展,以三维数字镜像桥梁为孪生底座,打造全息感知预警为先、及时干预处置为主,复盘总结为后的精......
  • 【Kubernetes】 容器探针
    【Kubernetes】容器探针Kubernetes提供了探针,通过Kubelet对容器执行定期诊断,以了解容器内应用的状态,以探测结果来决定做哪些操作(比如重启容器、关闭流量),kubernetes中提供了三种探针,分别是就绪探针、存活探针、启动探针,如果不使用探针,默认认为是成功的。每种探针又提供了四种探......