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);
同样的问题。
答案 0 :(得分:2)
尝试使用regex_iterator<char const*>
而不是regex_iterator<std::string::const_iterator>
。 (另外,你调用make_regex_iterator
的方式在很大程度上是不必要的冗长。)
假设line
是std::string
,请尝试:
regex_it = boost::make_regex_iterator(line.c_str(), re);
或者这个:
regex_it = boost::cregex_iterator(line.data(), line.data() + line.size(), re);