Tob*_*ull 8 c++ search iterator boyer-moore c++17
我想从a读取,std::istream直到找到一定数量的字符,即,我想实现以下接口:
void read_until (std::istream &is, std::string_view needle);
Run Code Online (Sandbox Code Playgroud)
使用std::istreambuf_iterator,我相信这相当于std::search单通道迭代器的组合.不幸的是,std::boyer_moore_searcher需要随机访问迭代器.
使用C++标准库(以及与大小成比例的一点内存sv)是否有上述接口的简单实现,或者我是否必须自己编写代码?
void read_until (std::istream &is, std::string_view needle) {
if (needle.size()==0) return;
std::string buff;
buff.reserve(needle.size());
auto it = std::find_if( std::istream_iterator<char>(is), std::istream_iterator<char>(), [&](char c) {
buff.push_back(c);
if (buff.size() < needle.size()) {
return false;
}
if (buff == needle)
return true;
buff.erase(buff.begin());
return false;
});
}
Run Code Online (Sandbox Code Playgroud)
这是我能用std算法做到的最好的事情。
为了优化,使用循环buff可能会节省一些工作。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |