C++11 regex_token_iterator
C++11 regex_token_iterator
嗯。。。我以为我理解正则表达式,也以为我理解迭代器,但C++11的正则表达式实现让我感到困惑。。。
我不理解的一个方面是:在阅读regex令牌迭代器时,我发现了以下示例代码:
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <regex>
int main()
{
std::string text = "Quick brown fox.";
// tokenization (non-matched fragments)
// Note that regex is matched only two times: when the third value is obtained
// the iterator is a suffix iterator.
std::regex ws_re("\s+"); // whitespace
std::copy( std::sregex_token_iterator(text.begin(), text.end(), ws_re, -1),
std::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "n"));
...
}
我不明白以下输出是如何的:
Quick
brown
fox.
是由上面的std::copy()函数创建的。我看不到循环,所以我对迭代是如何发生的感到困惑。或者换言之,多行输出是如何生成的?
std::copy
将元素从输入范围复制到输出范围。在程序中,输入范围是使用正则表达式分隔符提取的三个标记。这是打印到输出中的三个单词。输出范围是ostream_iterator
,它简单地获取给定的每个元素并将该元素写入输出流。
如果您使用调试器逐步执行std::copy
,您将看到它在输入范围的元素上循环。
相关文章:
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- Arduino无法编译名为SP:"Expected ')' before '(' token"的变量
- 为什么我的功能在使用 goto 时会给我带来"expected primary-expression before '}' token"?
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 使用结构和数组时的"expected primary expression before '.' token"
- 什么是"std::set<int,int>::iterator"?
- 如何解决"Expected expression before " = " token"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 我可以将"token pasting operator"与"const"模板参数一起使用吗?
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 错误:创建模板类时"expected unqualified-id before '{' token"
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator