使用带有迭代器的 boost 字符串算法

Posted

技术标签:

【中文标题】使用带有迭代器的 boost 字符串算法【英文标题】:Using boost strings algorithms with iterators 【发布时间】:2014-04-18 15:41:12 【问题描述】:

我有一个用 2 个迭代器定义的字符串。我想检查它是否以一些字符串结尾。 现在我的代码看起来像

algorithm::ends_with(string(begin,end),"format(");

有没有什么方法可以在不构造字符串的情况下执行这个函数?类似的东西

algorithm::ends_with(begin,end,"format(");

【问题讨论】:

【参考方案1】:

是的。

 std::string s = "something";
 bool b = boost::algorithm::ends_with( &s[0], "g");  // true

迭代器也可以用来构造范围:

#include <boost/range.hpp>

std::string s = "somet0hing";
std::string::iterator it = s.begin();
bool b = boost::algorithm::ends_with( 
                        boost::make_iterator_range( it, s.end()), "g");  // true

或:

std::string s = "somet0hing";
std::string::iterator it = s.begin();
bool b = boost::algorithm::ends_with( &(*it), "g");  // true

【讨论】:

不是用0结尾的字符串代替范围吗?所以嵌入零的处理方式不同......无论如何通常都是合适的。 @Deduplicator 添加了使用 make_itearator_range 的版本

以上是关于使用带有迭代器的 boost 字符串算法的主要内容,如果未能解决你的问题,请参考以下文章

GBDT 算法

机器学习——GBDT算法与stacking算法

Boost库初见

Boost入门

boost::enable_if enabler() 与使用 boost::iterator_facade 创建迭代器的教程相关

STL源码剖析(迭代器)