Сбой конструктора Boost :: regex_iterator, но функция make_regex_iterator завершается успешно - PullRequest
0 голосов
/ 15 июня 2011
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 в нерекурсивном режиме по умолчанию.

EDIT: также попытался

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

та же проблема.

1 Ответ

2 голосов
/ 15 июня 2011

Попробуйте работать с 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);
...