gpt4 book ai didi

C++11 regex_token_iterator

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:56 25 4
gpt4 key购买 nike

嗯...我以为我理解正则表达式,我以为我理解迭代器,但 C++11 的正则表达式实现让我感到困惑...

一个我不明白的地方:阅读 regex token iterators ,我遇到了以下示例代码:

#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++11 regex_token_iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com