Boost::regex_iterator 构造函数失败,但 make_regex_iterator 函数成功
std::string line;
这会抛出 std::runtime_error What(): Memory exed
:
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);
同样的问题。
std::string line;
This throws std::runtime_error what(): Memory exhausted
:
regex_it = boost::sregex_iterator(line.begin(), line.end(), re);
This works fine:
regex_it = boost::make_regex_iterator(line, re);
Does anyone know what is causing the difference in performance? The boost::regex lib is compiled on Linux in default non-recursive mode.
EDIT:
Also tried
regex_it = boost::cregex_iterator(line.data(), line.data()+line.size(), re);
same problem.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试使用
regex_iterator
而不是regex_iterator
。 (此外,您调用 make_regex_iterator 的方式在很大程度上不必要地冗长。)假设
line
是std::string
,请尝试这个:或者这个:
Try working with a
regex_iterator<char const*>
rather than aregex_iterator<std::string::const_iterator>
. (Also, the way you're callingmake_regex_iterator
is unnecessarily verbose by a large measure.)Assuming
line
is astd::string
, try this:or this: