linux+c+逐行读文件内容,使用C ++中的ifstream逐行读取文件

在C ++中逐行读取文件可以通过某些不同的方式完成。

[快]循环使用std :: getline()

最简单的方法是使用std :: getline()调用打开std :: ifstream和循环。 代码简洁易懂。

#include

std::ifstream file(FILENAME);

if (file.is_open()) {

std::string line;

while (getline(file, line)) {

// using printf() in all tests for consistency

printf("%s", line.c_str());

}

file.close();

}

[Fast]使用Boost的file_description_source

另一种可能性是使用Boost库,但代码更加冗长。 性能与上面的代码非常相似(Loop with std :: getline())。

#include

#include

#include

namespace io = boost::iostreams;

void readLineByLineBoost() {

int fdr = open(FILENAME, O_RDONLY);

if (fdr >= 0) {

io::file_descriptor_source fdDevice(fdr, io::file_descriptor_flags::close_handle);

io::stream <:file_descriptor_source> in(fdDevice);

if (fdDevice.is_open()) {

std::string line;

while (std::getline(in, line)) {

// using printf() in all tests for consistency

printf("%s", line.c_str());

}

fdDevice.close();

}

}

}

[最快]使用C代码

如果性能对您的软件至关重要,您可以考虑使用C语言。 此代码可以比上面的C ++版本快4-5倍,请参阅下面的基准测试

FILE* fp = fopen(FILENAME, "r");

if (fp == NULL)

exit(EXIT_FAILURE);

char* line = NULL;

size_t len = 0;

while ((getline(&line, &len, fp)) != -1) {

// using printf() in all tests for consistency

printf("%s", line);

}

fclose(fp);

if (line)

free(line);

基准 - 哪一个更快?

我已经使用上面的代码完成了一些性能基准测试,结果很有趣。 我已经使用包含100,000行,1,000,000行和10,000,000行文本的ASCII文件测试了代码。 每行文本平均包含10个单词。 该程序使用-O3优化编译,其输出转发到/dev/null,以便从测量中删除记录时间变量。 最后,但并非最不重要的是,为了保持一致,每段代码都使用printf()函数记录每一行。

结果显示每段代码读取文件所用的时间(以毫秒为单位)。

两种C ++方法之间的性能差异很小,在实践中不应有任何区别。 C代码的性能使得基准测试令人印象深刻,并且在速度方面可以改变游戏规则。

10K lines 100K lines 1000K lines

Loop with std::getline() 105ms 894ms 9773ms

Boost code 106ms 968ms 9561ms

C code 23ms 243ms 2397ms

fKKqc.png

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

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

相关文章

如何区分netty是udp还是tcp_鲜奶粉还是大包粉,到底该如何区分?

100%的宝爸宝妈们都希望为宝宝挑选最营养、最新鲜的口粮&#xff0c;也相信让娃爸每周逛遍各大超市&#xff0c;只为了选两罐最新日期的奶粉&#xff0c;这种事情一定不止一个人做过&#xff01;一直以来&#xff0c;人们对于“新鲜”有着亘古不变的追求。尤其是对待生活中的“…

Winform 进度条弹窗和任务控制

Winform 进度条弹窗和任务控制目录Winform 进度条弹窗和任务控制一、弹窗前台二、弹窗后台三、使用方法四、效果展示和代码地址独立观察员 2020 年 11 月 17 日最近要给一个 Winform 项目添加功能&#xff0c;需要一个能显示进度条的弹窗&#xff0c;还要求能够中止任务&#x…

c语言prime函数怎么用_C语言 要发就发

点击上方“蓝字”关注我们愉快的一天&#xff0c;不得不做的三件事&#xff1a;种田&#xff0c;锄地&#xff0c;整代码&#xff01;&#xff01;&#xff01;【题目】“1898——要发就发”。请将不超过1993的所有素数从小到大排成第一行&#xff0c;第二行上的每个数都等于它…

linux如何使用vnc远程登录,如何使用Xmanager及VNC登录远程桌面

如何调用远程桌面&#xff0c;比较常见的有两种方式&#xff1a;Xmanager及VNC正好今天鼓捣了一下&#xff0c;特整理如下&#xff1a;XmanagerXmanager的调用也有两种方式&#xff1a;一、直接在Xshell中调用这时需设置会话属性&#xff0c;如下图所示&#xff0c;需在“隧道”…

python自然语言处理_python

chinese-xinhua/ | - data/ 汉字例子&#xff1a; { "word": "吖", "oldword": "吖", "strokes": "6", "pinyin": "ā", "radicals": "口", "explanation": &…

别在.NET死忠粉面前黑.NET5,它未来可期!

期盼已久的.NET5&#xff0c;终于在11月11日正式发布&#xff0c;整个.NET社区都为之沸腾&#xff0c;知乎、博客园、QQ群、微信群&#xff0c;随处可见.NET5 的热议&#xff0c;作为.NET死忠粉&#xff0c;我也挺兴奋的。然而一片欢歌笑语中总有一些很不和谐的声音&#xff0c…

c#物联网_C# 基础知识系列- 16 开发工具篇

0. 前言 这是C# 基础知识系列的最后一个内容讲解篇&#xff0c;下一篇是基础知识-实战篇。这一篇主要讲解一下C#程序的结构和主要编程工具。 1. 工具 工欲善其事必先利其器&#xff0c;在实际动手之前我们先来看看想要编写一套C#程序需要做哪些准备吧。 1.1 选择 C# 的sdk在之前…

接口幂等设计探索实践

幂等性原本是数学上的概念&#xff0c;即使公式&#xff1a;f(x)f(f(x)) 能够成立的数学性质。用在编程领域&#xff0c;则意为对同一个系统&#xff0c;使用同样的条件&#xff0c;一次请求和重复的多次请求对系统资源的影响是一致的、或者说是符合预期的。背景稳定性设计第一…

Windows 7 安装 .NET 5 / .NET Core 3.1 环境的方法和依赖文件

随着 .NET 5 正式版的发布&#xff0c;越来越多的人开始向 .NET 5 、.NET Core 平台迁移。尽管微软已经在 2020 年 1 月 14 日停止了对 Windows 7 的支持&#xff0c;但仍有大批客户的操作系统对 Windows 7 恋恋不舍。为此&#xff0c;我们需要解决 .NET 5 运行时&#xff08;R…

easyui 动态设置单元格控件_动态显示最大最小值的折线图

小伙伴们好啊&#xff0c;今天和大家分享一个图表有关的知识。折线图想必大家已经司空见惯&#xff0c;今天就要在简单的折线上&#xff0c;做出不简单的效果。用动态折线图&#xff0c;展示一周销售的变化&#xff0c;并且自动突出最大最小值。1、准备数据源以某家水果店1月份…

WebBenchmark动态测试Webapi

在编写Webapi测试用例的时候都是定义固定的测试数据&#xff0c;但这样的测试只能针对单一数据。为了更好的模拟实际情况&#xff0c;往往需要进行动态数据测试&#xff1b;通过动态数据测试可以更好的测出服务在不同数据情况下的处理能力。WebBenchmark支持动态数据函数&#…

linux开发需要学习什么,linux开发需要掌握哪些知识?

原标题&#xff1a;linux开发需要掌握哪些知识&#xff1f;嵌入式linux开发的应用是非常广泛的。而且linux是开源的&#xff0c;各种技术也是非常成熟的。不过很多初学者在学习linux开发过程中感觉非常难&#xff0c;那么对于linux开发需要掌握哪些知识呢&#xff1f;1.Linux是…

csv 字符串_python3从零学习-5.5.1、CSV 文件读写

源代码&#xff1a; Lib/csv.py模块内容csv 模块定义了以下函数&#xff1a;csv.reader(csvfile, dialectexcel, **fmtparams)返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。csvfile 可以是任何对象&#xff0c;只要这个对象支持 iterator 协议并在每次调用 __ne…

持续交付三:动手自动化“开发”—“测试”

前两篇博文中提到Development,QA,Staging,Production四个环境&#xff0c;也说明了源代码的分支和四个环境的对应关系&#xff0c;本篇博文聊一下&#xff0c;怎么把源码自动化发布到对应的环境中。市面上主流的DevOpt工具都支持这些功能&#xff0c;github,gitlab&#xff0c;…

使用WebBenchmark对webapi进行管理和性能测试

WebBenchmark是基于beetlex开发的webapi管理和性能测试软件&#xff0c;最新版本1.0.3可以独立运行在linux/windows中&#xff0c;并不再需要安装.net core运行环境。部署可以通过以下地址下载最新版本:https://github.com/IKende/WebBenchmark可以根据需要下载linux64或win64运…

三维叉乘怎么算_奇技淫巧系列:向量叉乘

​一般我们在解决立体几何题目时会选择建立坐标系&#xff0c;因为这样做比较保险也有固定套路。很多时候这些题目要求你计算某一个面的法向量&#xff08;normal vector&#xff09;&#xff0c;这在高中阶段也是有固定方法的&#xff0c;我们这里想要介绍的是一种更高级也更迅…

g++ linux intel 汇编,g++ linux

目标&#xff1a;运行C代码example&#xff1a;有func.h,func.cpp, main.cpp- .h无需编译&#xff0c;但.h中函数实现的地方需要编译(func.cpp)- 逻辑&#xff1a;cpp各自生成可执行文件(.o),再进行链接g -c func.cppg -c main.cppg main.o func.o -o test或者直接&#xff1a;…

听说容器正在吃掉整个软件世界?

过去几年&#xff0c;以 docker、kubernetes 为代表的容器技术已发展为一项通用技术&#xff0c;BAT、滴滴、京东、头条等大厂&#xff0c;都争相把容器和 k8s 项目作为技术重心&#xff0c;试图“放长线钓大鱼”。就说腾讯吧&#xff0c;目前基本所有业务都跑在云上&#xff0…

linux 短信功能,Android调用系统短信功能发送短信

Android调用系统短信功能发送短信有两种方法:第一种&#xff0c;设定发送的号码&#xff0c;和内容&#xff0c;界面没有联系人&#xff0c;群组组等按钮&#xff0c;如下图所示&#xff1a;代码如下&#xff1a;Uri smsToUri Uri.parse("smsto:114");// 联系人地址…

bcm943602cs蓝牙用不了_原来手机的蓝牙功能这么强大!除了连接耳机,还有这六大实用功能...

蓝牙是手机上的一个普通功能&#xff0c;基本上所有的手机里都有它&#xff0c;原先它的作用很有限&#xff0c;只是用来传输数据&#xff0c;但由于速度太慢&#xff0c;最后也是被软件所淘汰&#xff0c;慢慢的可以用来连接耳机&#xff0c;这也是博主用的比较多的一个功能&a…