string的 find_first_of 妙用

场景

今天写了个程序,需要读取100W条数据到一个buff中。然后需要通过调用 string 类的 find_first_of成员函数来找到每条数据的分隔符。
刚开始的时候直接查找分隔符 , 最后发现查找的很慢很慢,最终发现如果我每次记录下前一个位置,基于前一个位置去查找这样就很快跑完了。

pos = buff.find_first_of('t');
改为
startpos = 0;
pos = buff.find_first_of(startpos,'t');
startpos = pos+1;

分析

如果是第一种写法,时间复杂度O(N^2) , 如果是第二种写法只遍历了一遍buff,时间复杂度O(N) 。
不起眼的一个小操作,这导致的效率是天差地别。
如果是100万条数据。N的二次方,将会遍历 1万亿次数据,这是不可接受的,即使在当前计算器如此发达的年代。

分析图
方法1

这里写图片描述

方法2

直接基于上一个位置开始查找,不再需要从头开始了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值