c++:c++中的输入输出(二)
1.getline
getline是包含于头文件:<string>的函数
作用:读取一行字符串(包含空格)
使用格式:getline(cin,str);
string a;getline(cin, a);
假设我们有一个场景是需要识别一行字符串中的字母a的个数,我们有两种读取策略
策略1:先用getline读取一整行的字符串,然后一个个字符进行判断
策略2:由于空格是否读取不会影响最终结果,所以我们直接用cin读取一个个单词,然后一个个字符判断。
这里就可以看出cin和getline的使用区别,cin会自动忽略掉空格读取,而getline会保留空格读取
2.fgets与fputs
这两个都是包含于头文件:<cstdio>的函数
fgets的作用是从文件中读取字符并存在str中
使用格式:
char * fgets ( char * str, int num, FILE * stream );num表示读取的个数,str是指向存储读取到的字符串的char数组的指针,stream是文件流
fputs的作用是将str写入文件流中
使用格式:
int fputs ( const char * str, FILE * stream );
3.数字的特殊处理方式
其实在控制台中,当我们输入数字的时候编译器识别出来的是字符,只不过当我们把这个读取的数据给到整型变量或者其他数字类型的变量的时候,他会按照你给定的类型来解读这个字符数据。
然后在输出数据的时候其实也是按照字符输出的,编译器将变量中的数据转换成字符类型输出
下面我们解读一下例子:
这里我们从键盘输入的123,其实被编译器识别为字符‘1’‘2’‘3’,然后由于我们给到的是变量a,所以编译器会按照整型数据的方式来识别字符,于是最终就识别出了123给到a变量
下面我们用一道题来讲解我们可以如何利用编译器的这种特性来简单解题:
本题需要我们将数字的奇数对应位置改为1,偶数对应位置改为0。
方法一:数字处理
第一步:将数据录入
第二步:当当前数据%10的结果是奇数的时候,将当前ret+=乘上权重的1,然后/10将当前位数去掉,循环n次
第三步:输出结果
方法二:字符串处理
第一步:将数据以字符串的形式录入
第二步:利用for循环对字符串的每一位进行取余判断,若为偶数就将当前位置数据改为0,为奇数就改为1
第三步:将字符串通过stoi转为整数之后输出
注意:第三步之所以要转换为整数,是为了处理前导0的情况
经过这两种方法的对比:我们发现,将数据转换为字符串的处理方式是很简单的,而整数的处理方式相对麻烦。其实在算法竞赛中我们关注的仅仅是结果,过程是怎样的并不重要
4.printf/scanf和cin/cout的对比
在输入数据量不大的时候,由于cin和cout的自动识别数据类型的特性,我们一般使用cin和cout更多一点,但是有时候我们需要格式化输出数据,我们就不得不使用printf了。
(1)格式输出差异
cin和cout可以自动识别数据类型,避免出现格式错误,但是无法精确控制输出格式。
printf和scanf需要手动指定输入和输出格式,如果输入/输出格式对不上会出现不符合预期的问题,但是可以实现精确的定制化输出
(2)性能差异
结论:优化后的cin/cout > printf/scanf > 没优化的cin/cout
没优化的cin/cout慢的原因:由于他们需要负责兼容c语言printf/scanf的任务,所以他们在执行输入输出的时候会有一些多出的指令需要同步执行,从而导致他们没有printf/scanf快
两个具体原因:
(1)为了兼容c,c++在每次使用cout/cin的时候都会刷新c标准库的缓冲区,这意味着cout和cin每次都要将数据同步给printf和scanf,以确保他们的i/o流是一样的
(2)cin和cout之间有一层绑定关系,这个关系具体来说就是cin每次调用前会向cout发送一个指令,让cout将待输出的数据刷新到屏幕上,当输入输出数据量很大的时候,这个指令的总延时就很大了
那么我们有什么方式优化cin/cout?
ios::sync_with_stdio(false); //取消给C语⾔输⼊输出缓冲区的同步cin.tie(0); //取消了cin和cout的绑定通过取消对c输入输出缓冲区的同步,以及取消cin/cout的绑定关系,我们可以显著提升cin/cout的效率
注意:
1.取消同步带来的问题:在多线程环境下会有安全问题,且不再支持c语言的输入输出,因为取消了数据对c输入输出流的同步
2.取消同步的使用场景:
算法竞赛中只使用c++的输入输出时/程序确保只使用c++的输入输出
3.取消绑定的使用场景:
算法竞赛中的高性能输入输出/非交互式程序(输出内容不用在用户输入一次数据之后直接输出)/并行处理数据时,可以减少因为cout还没输出而浪费的cin等待时间总结:
输入输出数据量:小于1e6,都可以 ; 小于1e9,建议用printf和scanf ; 更大的时候需要用快速读写
相关文章:
c++:c++中的输入输出(二)
1.getline getline是包含于头文件:<string>的函数 作用:读取一行字符串(包含空格) 使用格式:getline(cin,str); string a;getline(cin, a); 假设我们有一个场景是需要识别一行字符串中的字母a的个数,…...
UniApp + Cursor + Devbox 全栏平台开发教程:从0到完整项目打造
本文基于B站热门教程《一口气学会小程序 / App / H5开发:UniApp教程 + Cursor + Devbox》,https://www.bilibili.com/video/BV1W7QZYMEus/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=a1428945043b2df41c1896acb90d942a,进行全面扩展…...
电流模式控制学习
电流模式控制 电流模式控制(CMC)是开关电源中广泛使用的一种控制策略,其核心思想是通过内环电流反馈和外环电压反馈共同调节占空比。相比电压模式控制,CMC具有更快的动态响应和更好的稳定性,但也存在一些固有缺点。 …...
服务器架构:SMP、NUMA、MPP及Docker优化指南
文章目录 引言 一、服务器架构基础1. SMP(对称多处理,Symmetric Multiprocessing)2. NUMA(非统一内存访问,Non-Uniform Memory Access)3. MPP(大规模并行处理,Massively Parallel Pr…...
人脸识别联合行为检测的办公管理新模式
基于人脸识别与行为检测的办公智能化解决方案 一、背景 在传统办公场景中,员工考勤管理、工位使用情况统计、安全监控等环节存在诸多痛点。例如,传统考勤方式如指纹打卡、刷卡等存在代打卡现象,考勤数据不准确;对于员工是否在工…...
Python 写生成 应用商店(2025版) 网页 方便收集应用 ,局域网使用
工具【1】:nginx 配置 nginx.conf 文件 server { listen 8080; server_name example.com; location / { root E:/BIT_Soft_2025; index index.html index.htm; } # 定义错误页面 error_page 404 /4…...
Spring 单元测试核心注解全解:@InjectMocks、@MockBean、@Mock、@Autowired 的区别与实战
在编写 Spring Boot 应用的单元测试过程中,@InjectMocks、@MockBean、@Mock 和 @Autowired 是最常用的几个注解,但它们经常被混淆或误用,导致测试失败或注入错误。 本文将从本质区别、使用场景、示例代码、对比表格等多个维度,全面解析这几者的使用方法与差异,助你写出结…...
2025年大一训练-DP1
2025年大一训练-DP1 Problem A: 动态规划算法,从上往下一层层找到到达对应位置的最大值,最底下一行maxl的最大值即为答案 #include<bits/stdc.h> using namespace std; int lst[101][101]; int maxl[101][101];int main() {int n,i,j;while(cin&g…...
【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API
Math类的使用。 Math用于做数学运算。Math类中的方法全部是静态方法,直接用类名调用即可。方法: public static int abs(int a) 获取参数a的绝对值public static double ceil(double a) 向上取整public static double floor(double a) 向下取整public s…...
conversation_template | conversation_actors | conversation_line_template
目录 conversation_template conversation_actors conversation_line_template 实例应用 conversation_template id:某段谈话的唯一编号FirstLineId:谈话开始的第一段话的编号,取值来源 ConversationLine.db2 的 ID 字段TextureKitId&am…...
架构图--架构师的行军地图
架构图是架构师最重要的沟通和规划工具之一,它如同行军地图般指导着整个软件系统的构建与演进。本文系统性地探讨了软件架构图设计的全面方法论,提出横向与纵向双维度的设计框架。横向设计关注模块间的业务、数据与重要性关系,纵向设计则采用…...
`get_peft_model` 是 `peft` 库什么方法
get_peft_model 是 peft 库什么方法 get_peft_model 是 peft 库中一个关键的方法,其作用是将 LoRA 配置应用到预训练模型上,使得模型能够使用 LoRA 技术进行高效微调。 整体逻辑概述 get_peft_model 方法的核心任务是遍历预训练模型的各个模块,识别出需要应用 LoRA 的目标…...
OpenHarmony-Risc-V上运行openBLAS中的benchmark
OpenHarmony-Risc-V上运行openBLAS中的benchmark 文章目录 OpenHarmony-Risc-V上运行openBLAS中的benchmark前言一、编译openBLAS1.源码下载2.工具链下载3.编译并安装openBLAS 二、编译open BLAS中的benchmark三、上设备运行总结 前言 参考https://zhuanlan.zhihu.com/p/18825…...
HAL库通过FATFS和SDIO+DMA写入SD卡数据错误
HAL库F4版本 1.28.1 最近在使用HAL库配置SDIODMA并通过FATFS向SD卡写入数据,但是发现写入的数据经常有错误,不是少了一部分就是多了一部分,写入的数据为csv格式,通过循环向缓冲区写入"100100,12.345678\r\n"数据来观察问…...
深入解析 Python 中的装饰器 —— 从基础到实战
1. 装饰器基础 1.1 什么是装饰器? 装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能。装饰器的返回值也是一个函数对象。 1.2 语法糖: 符号 Python 提供了 符号作为装饰器的语法糖,…...
【Java并发】Java并发编程之CountDownLatch详解:原理、使用场景与代码实战
摘要 在Java多线程编程中,CountDownLatch 是一个强大的同步工具类,用于协调多个线程的执行顺序,线程间的同步是一个常见的需求。CountDownLatch 作为 java.util.concurrent 包中的一个同步辅助类,提供了一种简单而有效的方式来实…...
python-图片分割
图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,例如分割出物体、前景背景或特定的部分。在 Python 中,常用的图片分割方法包括传统的图像处理技术(例如阈值分割、区域生长等)和深度学习…...
江湖路远,唯PUT可稳:Express 路由更新招式全解
前言 江湖传闻,后端开发如同修炼绝世武功:有人精通 POST 掌,横扫千军;有人修习 GET 指法,探查万象。而真正踏入高阶境界的高手,常常默默修炼一门冷门却威力极强的秘技,PUT 神功。 今日时机正好,你我相逢于码海江湖,不如来一场技术切磋,也许能悟出更新之道,功力再上…...
MySQL:Join连接的原理
连接查询的执行过程: 确定第一个需要查询的表【驱动表】 选取代价最小的访问方法去执行单表查询语句 从驱动表每获取到一条记录,都需要到t2表中查找匹配的记录 两表连接查询需要查询一次t1表,两次t2表,在两表的连接查询中&…...
2025.04.14【Table】| 生信数据表图技巧
Custom title A set of examples showing how to customize the titles of a table made with GT Custom footer How to customize the footer and the references section of a gt table 文章目录 Custom titleCustom footer 生信数据可视化:Table图表详解1. R语…...
方案解读:虚拟电厂标杆项目整体建设方案【附全文阅读】
在电力市场背景下,传统电力现货市场存在电能定价不合理、分布式电源并网困难等问题。本虚拟电厂标杆项目旨在研究全时间尺度虚拟电厂智能管控关键技术,通过研制虚拟电厂控制器样机、开发运行管理平台,实现对分布式能源的合理优化配置。项目内容涵盖虚拟调控、建设目标、建设…...
使用Trae CN分析项目架构
架构分析后的截图 A区是打开的项目、B区是源码区、C区是AI给出当前项目的架构分析结果。 如何用 Trae CN 快速学习 STM32 嵌入式项目架构 在嵌入式开发领域,快速理解现有项目的架构是一项关键技能。Trae CN 作为一款强大的分析工具,能帮助开发者高效剖…...
【Python3】Django 学习之路
第一章:Django 简介 1.1 什么是 Django? Django 是一个高级的 Python Web 框架,旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”(DRY,Don’t Repeat Yourself)的原则,并提供了…...
浏览器缩放后 element ui组件偏移
一、需求:当body的有了zoom值之后,element ui相关的popper弹框(下拉框、日期选择框、分页组件)位置都会出现偏移问题 二、问题来源 popper弹框都会需要根据屏幕x,y的坐标来设置位置,但是有了zoom值之后,x,y…...
FPGA学习——DE2-115开发板上设计波形发生器
1. 实验目的 掌握直接数字频率合成(DDS)技术的基本原理和应用。使用DE2-115开发板实现正弦波和方波的生成。使用SignalTap II嵌入式逻辑分析仪测试输出波形的离散数据。 2. 实验原理 DDS技术:通过相位累加器生成相位信息,结合波…...
Next.js 技术详解:构建现代化 Web 应用的全栈框架
1. Next.js 概述 Next.js 是一个基于 React 的全栈框架,由 Vercel 团队开发和维护。它提供了一系列开箱即用的功能,使开发者能够快速构建高性能的 Web 应用。 核心优势 服务端渲染 (SSR)静态站点生成 (SSG)增量静态再生成 (ISR)文件系统路由API 路由图…...
【springsecurity oauth2授权中心】简单案例跑通流程
项目被拆分开,需要一个授权中心使得每个项目都去授权中心登录获取用户权限。而单一项目里权限使用的是spring-security来控制的,每个controller方法上都有 PreAuthorize("hasAuthority(hello)") 注解来控制权限,想以最小的改动来实…...
golang channel源码
解析 数据结构 hchan:channel 数据结构 qcount:当前 channel 中存在多少个元素; dataqsize: 当前 channel 能存放的元素容量; buf:channel 中用于存放元素的环形缓冲区; elemsize:channel 元素…...
小刚说C语言刷题——1033 判断奇偶数
1.题目描述 输入一个整数,判断是否为偶数。是输出 y e s ,否则输出n o。 输入 输入只有一行,包括 1个整数(该整数在 1∼10000的范围内)。 输出 输出只有一行。(注意输出格式,具体请看下方提…...
2025TGCTF Web WP复现
AAA 偷渡阴平 <?php$tgctf2025$_GET[tgctf2025];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){//hint:你可以对着键盘…...

