0
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);

同じ問題。

4

1 に答える 1

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);
于 2011-06-14T22:14:08.423 に答える