基于范围的for-loop over regex匹配?

Kno*_*abe 4 c++ c++11

在C++ 11的最终草案中,基于范围的for循环可以指定通过一对迭代器迭代的范围.这使得迭代正则表达式的所有匹配变得容易.后来删除了使用一对迭代器指定范围的能力,它在C++ 11中不存在.是否仍然有一种直接的方法来迭代特定正则表达式的所有匹配?我希望能够做到这样的事情:

std::regex begin(" 1?2?3?4* ");
std::regex end;

for(auto& match: std::pair(begin, end)) process(*match);
Run Code Online (Sandbox Code Playgroud)

在C++ 11中是否支持这种事情?

Nic*_*las 8

这样做的问题std::pair在于它"适用于"许多无效范围的事情.从而导致错误.

C++ 11没有内置的解决方案.您可以使用Boost.Range的make_iterator_range工具轻松构建一个.再说一次,手动操作并不困难:

template<typename T>
class IterRange
{
  T start;
  T end;
public:
  IterRange(const T &start_, const T &end_) : start(start_), end(end_) {}

  T begin() {return start;}
  T end() {return end;}
};

template<typename T> IterRange<T> make_range(const T &start, const T &end) {return IterRange<T>(start, end);}
Run Code Online (Sandbox Code Playgroud)