当前位置: 首页 > news >正文

[算法笔记]cin和getline的并用、如何区分两个数据对、C++中std::tuple类

1.cin和getline的并用

        std::cin是C++标准库<iostream>中定义的一个输入流对象,他用于从标准输入流中读取数据,当使用该对象的operator>>时候,会将用户从键盘输入到输入流中的内容提取出来,赋值给参数对象。如果输入流中没有数据的时候,通常会阻塞等待。

        他在读取的时候,不是将整个输入流中的内容都提取出阿里,通常会以空白字符(\n、\t以及空格)作为分隔符。仅读到第一个空白字符就会停止,但是不会对空白字符读取进行读取。那么就会有一个问题,输入流中会存在空白字符,再次的读取的时候,就会直接读取到空白字符了吗?

        cin的机制是,对于前置的空白字符,也就是第一个读取到的就是空白字符的时候,会忽略这个空白字符,继续向下读取。所以不会有一直读取不到数据的问题。

        但是使用完毕cin之后通常会按\n,就使用getline进行读取一行数据的时候,会出问题,因为getline没有像cin一样忽略前置空白字符的能力,所以他会直接读取\n,代表完成了一次数据的读取工作,但实际上这次读取什么也没读取上来。所以cin类中还提供了一个ignore函数,该函数可以用来忽略输入流中的前n个字符。或者遇到文件结束符才会停下。这样就可以使用该函数,忽略掉\n之后再让getline进行读取操作了。

istream& ignore( streamsize count = 1, int delim = Traits::eof() );

   

2.如何区分两个数据对 

        显然这非常好区分,可以使用一个pair结构去存储这个内容,然后定制一个对比函数,来进行对两个pair的比较就可以很好的区分出来了,不存在的话,在放入数组当中。但是这样的话,需要遍历对比数组中的所有元素对才可以。

        如果我们想要快速的查看一个数据对是否存在的时候怎么办呢?我们可以使用哈希map或者红黑树来进行快速判断,但是这样的话[1,4]与[4,1]就无法进行区分了,哈希map会把他当成两个数据进行存储两份,但是我们本意是存储一份的。所以我们存储的时候,可以对数据对进行排序,让小的作为key值,大的作为value值,之后再进行存储。

        还有一个办法就是将两个数据通过特定的计算,让他形成一个唯一的键值,存放在set或者是哈希set当这种,那么到时候只需要对比这个键值存不存在,就知道了这个元素对是否存在了。例如假设存在[u,v]数据对,u和v的取值在100以内,那么我们可以有以下的算法:

int key = u * (max_number + 1) + v;

        这里还有一个点在于 ,如果我们想让[1,4]与[4,1]当成一个数据对的时候,在往map、set、哈希map与哈希set内部存放的时候,可以定义小的作为key,大的作为value,就不会重复的存放同一个数据对了。

3.C++中std::tuple类

        std::tuple是 C++ 标准库中的一个模板类,它可以用来将多个不同类型的对象组合成一个单一的对象,类似于一个可以存储不同类型元素的容器。        

定义和初始化

        std::tuple类是一个可变参数模板类,也就是说他可以传递任意多数量的任意类型的参数。

// 使用构造函数定义和初始化tuple对象

std::tuple<int, float, std::string> myTuple(10, 3.14, "Hello"); 

// 使用make_tuple来构造一个tuple对象

auto anotherTuple = std::make_tuple(20, 2.718, "World"); return 0; }

访问元素

 std::get<索引值>(tuple对象)的形式进行访问元素

例如:std::get<0>(myTuple);

相关文章:

  • uniapp版本加密货币行情应用
  • Unity DOTS从入门到精通之EntityCommandBufferSystem
  • C#模拟鼠标点击,模拟鼠标双击,模拟鼠标恒定速度移动,可以看到轨迹
  • 【vitepress】如何搭建并部署自己的博客网站
  • sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】
  • 基于单片机的智慧农业大棚系统(论文+源码)
  • mysql(community版)压缩包安装教程
  • 【计算机网络】确认家庭网络是千兆/百兆带宽并排查问题
  • 解决电脑问题(5)——鼠标问题
  • Android SharedPreferences 工具类封装:高效、简洁、易用
  • MySql数据库增删改查常用语句命令-MySQL步骤详解教程
  • Docker 的基本概念和优势,以及在应用程序开发中的实际应用
  • (十七) Nginx解析:架构设计、负载均衡实战与常见面试问题
  • windows环境下安装部署dify+本地知识库+线上模型
  • linux安装reids
  • 探索在直播中的面部吸引力预测新的基准和多模态方法
  • Git基础之分支
  • 观看文艺汇演问题
  • YC 孵化项目 Pinch:实时语音翻译视频会议平台;Mistral OCR:能处理多语言多模态复杂文档丨日报
  • 【Linux】详谈 基础I/O
  • 体坛联播|巴萨4比3打服皇马,利物浦2比2战平阿森纳
  • “海豚音”依旧,玛丽亚·凯莉本周来沪开唱
  • 贵州省总工会正厅级副主席梁伟被查,曾任贵州省纪委副书记
  • 视频丨习近平同普京在主观礼台出席红场阅兵式
  • 14岁女生瞒报年龄文身后洗不掉,法院判店铺承担六成责任
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!