c语言getline读取一行命令行,如何从文件的特定行中获取getline()? C ++

这个问题非常不清楚。您如何确定具体

线?如果是第n行,最简单的解决方案就是调用

getlinen次,扔掉除最后一个结果以外的所有结果;呼唤

ignoren-1次可能会快一点,但我怀疑如果

您总是读入相同的字符串(而不是构造一个

每次都更新一次),时间上的差异不会很大。如果你

还有其他条件,文件确实很大(从您的

描述(不是)并进行排序,则可以尝试使用二进制搜索,

寻求文件的中间,请提前阅读以找到

下一行的开始,然后根据其决定下一步

值。 (我已使用它在日志文件中查找相关条目。但是

我们正在谈论的文件大小为几千兆字节。)

如果您愿意使用系统相关代码,则可能会有所帮助

内存映射文件,然后搜索\'\\ n \'的第n个出现位置

(std::findn次)。

添加:只是一些快速基准测试。在我的Linux机器上,获取

/usr/share/dict/words起的第100000个字(479623个字,每行一个,

在我的机器上),大约需要

272毫秒,读取所有单词

变成std::vector,然后索引,

256毫秒执行相同操作,但是

加上std::deque

30毫秒,使用getline,但是

只是忽略结果,直到

我感兴趣的一个

20毫秒使用

istream::ignore,以及

使用mmap和6毫秒

在std::find上循环播放。

FWIW,每种情况下的代码是:

对于std ::容器:

template

void Using::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

Container().swap( m_words );

std::copy( std::istream_iterator( input ),

std::istream_iterator(),

std::back_inserter( m_words ) );

if ( static_cast( m_words.size() ) < m_target )

Gabi::ProgramManagement::fatal()

<< \"Not enough words, had \" << m_words.size()

<< \", wanted at least \" << m_target;

m_result = m_words[ m_target ];

}

对于不保存的getline:

void UsingReadAndIgnore::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

std::string dummy;

for ( int count = m_target; count > 0; -- count )

std::getline( input, dummy );

std::getline( input, m_result );

}

对于ignore:

void UsingIgnore::operator()()

{

std::ifstream input( m_filename.c_str() );

if ( !input )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

for ( int count = m_target; count > 0; -- count )

input.ignore( INT_MAX, \'\\n\' );

std::getline( input, m_result );

}

而对于mmap:

void UsingMMap::operator()()

{

int input = ::open( m_filename.c_str(), O_RDONLY );

if ( input < 0 )

Gabi::ProgramManagement::fatal() << \"Could not open \" << m_filename;

struct ::stat infos;

if ( ::fstat( input, &infos ) != 0 )

Gabi::ProgramManagement::fatal() << \"Could not stat \" << m_filename;

char* base = (char*)::mmap( NULL, infos.st_size, PROT_READ, MAP_PRIVATE, input, 0 );

if ( base == MAP_FAILED )

Gabi::ProgramManagement::fatal() << \"Could not mmap \" << m_filename;

char const* end = base + infos.st_size;

char const* curr = base;

char const* next = std::find( curr, end, \'\\n\' );

for ( int count = m_target; count > 0 && curr != end; -- count ) {

curr = next + 1;

next = std::find( curr, end, \'\\n\' );

}

m_result = std::string( curr, next );

::munmap( base, infos.st_size );

}

在每种情况下,代码都将运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

12.UiAutomator 获取系统信息

一、Build构建信息 1.build类&#xff1a; Build类提供了硬件厂商、编号、序列号、SDK版本等重要信息。 类名&#xff1a;android.os.Build 常量名 说明 BOARD底层板名称BOOTLOADERBootloader版本号BRAND品牌CPU_ABICPU指令集CPU_ABI2CPU第二指令集DEVICE工业设计名称DISPLAY显…

c语言编写网页图形界面代码,「分享」C语言如何编写图形界面

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼贴吧内经常有人问C语言是不是只能用于字符终端界面开发&#xff0c;不能用于图形界面。大家也都有回答&#xff0c;需要其他的库。MFC&#xff0c;GTK&#xff0c;QT。本人近期刚用GTK库加上纯C写成了第一个LINUX实用程序。现在与大…

python 读取word_教你怎么使用 Python 对 word文档 进行操作

使用Python对word文档进行操作一、安装Python-docxPython-docx是专门针对于word文档的一个模块&#xff0c;只能读取docx 不能读取doc文件。说白了&#xff0c;python就相当于windows操作系统&#xff0c;QQ就是跑在windows操作系统上的软件&#xff0c;QQ最大的作用是可以去聊…

[国嵌攻略][084][信号同步编程]

进程同步 一组并发进程进行相互合作、相互等待&#xff0c;使得各进程按一定的顺序执行的过程称为进程间的同步。 进程同步与进程互斥 进程同步问题的关键在于生产者不需要获取信号量&#xff0c;消费者不需要释放信号量&#xff0c;所以信号量的初值设置为0。但是进程互斥问题…

android 控件覆盖关系,安卓子控件抢占父控件点击事件或者焦点问题

开发中很常见的一个问题&#xff0c;项目中的lListview不仅仅是简单的文字&#xff0c;常常需要自己定义listview&#xff0c;自己的Adapter去继承BaseAdapter&#xff0c;在adapter中按照需求进行编写&#xff0c;问题就出现了&#xff0c;可能会发生点击每一个item的时候没有…

stm32cubemx adc_STM32CubeMX__Exp5_ADC1_2CH_DMA_TIM3_Trig__简明指导文件__jyb

用定时器TIM3触发DMA方式的双通道ADC定时采样&#xff1a;拷贝STM32CubeMX工程文件LED_Flash_PC12.ioc&#xff0c;修改为&#xff1a;Exp5_ADC1_2CH_DMA_TIM3_Trig.ioc(1)配置ADC1的通道和参数配置ADC通道参数(2)配置ADC1的DMA①通过点"Add"按钮&#xff0c;添加ADC…

JS 实现 jQuery的$(function(){});

1、浏览器渲染引擎的HTML解析流程 何谓“渲染”&#xff0c;其实就是浏览器把请求到的HTML内容显示出来的过程。渲染引擎首先通过网络获得所请求文档的内容&#xff0c;通常以8K分块的方式完成。下面是渲染引擎在取得内容之后的基本流程&#xff1a; 1&#xff0c;解析html以构…

linux ora-00031,kill session遇到ORA-00031錯誤

今天在處理一個表被鎖死的問題時&#xff0c;遇到ORA-00031: 這個階段作業將被標示為要終結的階段作業具體操作步驟如下&#xff1a;1. 先確認鎖定資源的session信息select OS_USER_NAME,s.MACHINE ,object_name as對象名稱,s.sid,s.serial#,p.spid as系統進程號from v$locked_…

html 分页_MySQL——优化嵌套查询和分页查询

Java识堂&#xff0c;一个高原创&#xff0c;高收藏&#xff0c;有干货的微信公众号&#xff0c;欢迎关注优化嵌套查询嵌套查询(子查询)可以使用SELECT语句来创建一个单列的查询结果&#xff0c;然后把这个结果作为过滤条件用在另一个查询中。嵌套查询写起来简单&#xff0c;也…

从原理上搞定编码-- Base64编码

开发者对Base64编码肯定很熟悉&#xff0c;是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了&#xff0c;如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容&#xff0c;花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编…

android 点击选择文件夹,Android----弹出框选择文件夹目录以及启用新Task打开文件_IT168文库.pdf...

Android弹弹 出出框框 选选择择 文文件件 夹夹 目目录录 以以及及 启启用用新新 的的T ask打打 开开文文件件首首先先看看效效果果 图图第第一一个个 Act iv it y很很简简单单就就 一一个个按按钮钮 But t o n 加加一一个个 T ext View见见 main.xm l[[ cc -- ss hh aa rr pp ]…

docker mysql总是退出_Docker提升测试效率之路

现如今&#xff0c;Docker已经成为了很多公司部署应用、服务的首选方案。依靠容器技术&#xff0c;我们能在不同的体系结构之上轻松部署几乎任何种类的应用。作为测试一方&#xff0c;我们应与时俱进&#xff0c;将Docker容器技术应用到测试工作中。为了让小伙伴们可以快速上手…

2016030206 - mysql常用命令

参考地址如下&#xff1a; http://www.cnblogs.com/linjiqin/archive/2013/03/01/2939384.html http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html 用户登陆 mysql> mysql -u 用户名 -p 密码;  例子&#xff1a; mysql>mysql -u root -p&#xff1b; 输…

32位mysql安装包_软件测试基础——Linux系统搭建MySQL数据库

一、mysql下载1. 下载&#xff1a;官方网址:https://dev.mysql.com/downloads/mysql/2. 选择相应的版本&#xff0c;由于cenos是基于红帽的&#xff0c;所以Select Operating System选择Red Hat...。我所用的镜像为cenos7所以Red Hat....linux7&#xff0c;一定要选相应的版本&…

android webview 获取 title,【报Bug】app webview 安卓机 title显示问题

// #ifdef APP-PLUSvar that this;that.statusBarHeight uni.getSystemInfoSync().statusBarHeight;var w plus.webview.create(this.weburl, id, {// top: uni.getSystemInfoSync().statusBarHeight 44 ,//放置在titleNView下方。如果还想在webview上方加个地址栏的什么的…

easyphp环境配置

apache的配置文件httpd.conf // apache/conf //修改http.conf这个文件的编辑权限 <Directory /> Options All AllowOverride All Order deny,allow Allow from all </Directory> LoadModule php5_module "E:/PROGRA~1/EASYPH~1.9/php/php539x141026161807/ph…

android wifi 组播,在Android上显示实时UDP或RTP流(多播)

我已经尝试从播放器(Daroon播放器&#xff0c;PlayStore)读取它&#xff0c;它运行良好&#xff0c;所以我认为我的愚蠢问题不是由于广播 .我看到可以通过不同的方式向用户显示视频内容&#xff1a;在ACTION_VIEW中使用新的Intent&#xff0c;Android会选择可以查看内容的应用程…

python gevent模块 下载_Python中的多任务,并行,并发,多线程,多进程,协程区别...

多任务CPU承担了所有的计算任务。一个CPU在一个时间切片里只能运行一个程序。当我们想同时运行多于一个程序的时候&#xff0c;就是多任务&#xff0c;例如同时运行微信&#xff0c;QQ&#xff0c;浏览器等等。多任务的目的是提升程序的执行效率&#xff0c;更充分利用CPU的资源…

uniapp点击通知android,分享uniapp使用原生Android推送消息(内推)以及点击通知监听数据...

前言由于用uniapp官方的plus.push.createMessage()在Android平台下推送通知无法显示推送时间&#xff0c;需要调用原生Android推送通知。在社区综合了各大神的代码&#xff0c;具体如下&#xff1a;推送推送事件&#xff1a;/*** android原生通知发送* param content 通知内容*…

电脑安装python后开不了机_ubuntu 安装python3.6后,terminal终端打不开问题

由于Ubuntu16.04&#xff0c;自带Python2.7和Python3.5 当我安装完Python3.6.5后,terminal终端打不开了, jekayjekay-pc:~$ gnome-terminal Traceback (most recent call last): File "/usr/bin/gnome-terminal", line 9, in from gi.repository import GLib, Gio F…