tags: C++ STL Debug

写在前面

最近想尝试着使用C++重新洗一下图论中的经典算法, 深度优先搜索和广度优先搜索, 因为C++新版本中的STL越来越完善, 使用起来也是相当方便, 但是在使用集合(set)和无序集合(unordered_set)的时候还是出现了一些小小的问题. 下面来记录一下, 也是对初学STL的一个总结.

环境:

CLion gcc C++17

cmake 3.21

集合/无序集合中查找的区别

集合作为一种单键的容器, 其内置了查找方法, 用于查找集合中的元素, 如果存在则使迭代器指向找到的元素, 如果不存在则指向.end()迭代器位置. 看下面的一个例子:

#include <iostream>
#include <set>
#include <unordered_set>using namespace std;int main(int argc, char const *argv[]) {// unordered_set<int> ret = {20, 1, 2, 3};set<int> ret = {20, 1, 2, 3};for (auto &i: ret)cout << i << " ";cout << endl;int item = 10;cout << "查询" << item << "迭代器指向: " << *ret.find(item)<<endl;int item1 = 1;cout << "查询" << item1 << "迭代器指向: " << *ret.find(item1)<<endl;for (auto &i: ret)cout << i << " ";cout << endl;return 0;
}
/** 1 2 3 20 * 查询10迭代器指向: 0* 查询1迭代器指向: 1* 1 2 3 20 */

当使用set容器的时候, 查找容器中不存在的元素, 迭代器默认会指向0, 但是,当你使用无序集合, 就会发生分段错误, 即迭代器指向了一个空的元素, 在实际使用得时候, 还是应该采用ret.find(item) != ret.end(), 判断元素是否存在, 如果单纯对迭代器进行解引用操作就会出现问题. 但是在set中不会出现类似的问题, 只会使迭代器指向的元素为0, 即使容器中没有0这个元素.

C++中使用set和unordered_set的find方法时遇到的小坑相关推荐

  1. linux中read函数的用法,Linux中read命令的简介及使用方法

    Linux中read命令的简介及使用方法 发布时间:2020-08-17 16:40:04 来源:亿速云 阅读:107 作者:小新 这篇文章给大家分享的是有关Linux中read命令的简介及使用方法的 ...

  2. 关于C++中的unordered_map和unordered_set不能直接以pair作为键名的问题

    关于C++中的unordered_map和unordered_set不能直接以pair作为键名的问题 在 C++ STL 中,不同于有序的 std::map 和 std::set 是基于红黑树实现的, ...

  3. 搜集《ASP.NET中常用的26个优化性能方法》

    1. 数据库访问性能优化 a.数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接 ...

  4. linux 统计日志数量总,shell统计日志中时间段内匹配的数量的方法

    shell统计日志中时间段内匹配的数量的方法,有需要的朋友可以参考下. 假设日志文件mtasvr.log格式如下: T:24583088(04:02:06)[root:Info] 6KqowLDLAg ...

  5. C#中判断空字符串的3种方法性能分析【月儿原创】

    C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28  3种方法分别是:string ...

  6. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...

  7. java判断一个对象是否为空_Java中判断对象是否为空的方法的详解

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringU ...

  8. java 中lock,java中lock获取锁的四种方法

    在java接口中会存放着许多方法,方便线程使用时的直接调用.对于lock接口大家都不陌生,我们已经初步对概念进行了理解.那么在获取锁的方法上想必还不是很清楚.下面我们就lock获取锁的四种方法分别进行 ...

  9. web前端培训:CSS中单行文本溢出显示省略号的方法

    CSS中单行文本溢出显示省略号的方法你知道吗?在web前端技术学习中,这个问题其实是属于老生常谈了,因为css单行文本的应用是非常频繁的,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没 ...

最新文章

  1. 真·无监督!延世大学提出图像到图像无监督模型,实验结果超SOTA
  2. 谈谈我对Manacher算法的理解
  3. [转]VC获取各类指针
  4. python 排序 自定义函数
  5. 【FFmpeg】ffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )
  6. SAP系统怎样快速应对2019税改?
  7. centos7安装redmine3,并升级redmine1.8到3
  8. 11届蓝桥杯青少年组C++全国赛高级组 六.编程实现:求阶乘(python3实现)
  9. 95-134-110-源码-维表-Flink 1.9.0 维表实现
  10. 二维数组的最大联通子数组和
  11. Vue父组件向子组件传值
  12. 云计算:大数据时代的系统工程(三)
  13. win7用计算机名共享打印机,WIN7共享打印机 可以同时多少台电脑共享一台打印机-win7一键共享打印机,win7一键共享工具软件...
  14. python opencv车辆测速视频汽车速度检测入侵检测测速
  15. 线程typedef UINT (_cdecl* AFX_THREADPROC)(LPVOID)类型转换无效
  16. 计算机信息管理的检索步骤,信息检索策略与步骤
  17. My Hotmail Has Been Upgraded to 250MB!
  18. python编程计算圆面积和体积_计算sph体积和表面积的面向对象Python程序
  19. 1082 射击比赛(JAVA)
  20. ubuntu8.10显卡驱动安装(8500gt)

热门文章

  1. Luogu P1164小A点菜
  2. NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第二轮Day2题解
  3. ubuntu声音问题
  4. 【原】android【手机】屏幕适配解决方案,完美适配适配hdpi,xhdpi,xxhdpi的做法。...
  5. 谈谈Objective-C的警告 (转)
  6. 【Animation】 使用handler和Runnable实现某一个控件的抖动效果
  7. poj 2255 Tree Recovery
  8. linux自动输入sudo密码_用大写字母输入 Linux 命令,实现以 sudo 用户权限运行
  9. 我的世界基岩版json_Minecraft 基岩版 Ubuntu服务器搭建(三)
  10. 广度优先搜索——好奇怪的游戏(洛谷 P1747)