Boost :: regex_iterator构造函数失败但make_regex_iterator函数成功

时间:2011-06-14 22:01:10

标签: c++ boost boost-regex

std::string line;

这会抛出std::runtime_error what(): Memory exhausted

regex_it =  boost::sregex_iterator(line.begin(), line.end(), re);

这很好用:

regex_it = boost::make_regex_iterator(line, re);

有谁知道导致性能差异的原因是什么? boost :: regex lib是在Linux上以默认的非递归模式编译的。

编辑: 也尝试了

regex_it = boost :: cregex_iterator(line.data(),line.data()+ line.size(),re);

同样的问题。

1 个答案:

答案 0 :(得分:2)

尝试使用regex_iterator<char const*>而不是regex_iterator<std::string::const_iterator>。 (另外,你调用make_regex_iterator的方式在很大程度上是不必要的冗长。)

假设linestd::string,请尝试:

regex_it = boost::make_regex_iterator(line.c_str(), re);

或者这个:

regex_it = boost::cregex_iterator(line.data(), line.data() + line.size(), re);