微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sregex_iterator next and end.. 这是如何工作的?

如何解决sregex_iterator next and end.. 这是如何工作的?

伙计们,我是 C++ 的新手。所以请原谅我在这里的无知。我试图理解我在网上获得的以下代码。 while (next != end) 行到底做了什么?当我打印 &next 和 &end 的地址时,它们总是不同的(甚至发布 while 循环)。我认为 examples/lc.rktstd::sregex_iterator next 是两个不同的实例。那么为什么 std::sregex_iterator end 行认为它们会在某个时间点相等?我在引擎盖下看了看。好像是while (next != end)

我试图了解构造函数等,但不想列出我发现的所有那些,因为它们可能不相关。只是为了让您知道我来自 Java 世界,但一直在学习了解 C++ 的课程。

非常感谢任何帮助。谢谢

regex_iterator<string::const_iterator>

解决方法

只是想让你知道我来自 Java 世界,但一直在学习了解 C++ 的课程

这似乎是您困惑的原因。与 Java 相比,C++ 使用值语义。这意味着,当您通过 == 比较两个对象时,它不会测试身份,而是测试相等性,即比较值。

考虑一下

int x = 42;
int y = 42;

这是两个不同的对象,但它们的值是相同的:

assert( x == y );
assert( &x != &y );

Java 有这种装箱和简单类型的怪癖(不确定它们实际上是如何调用的),但在 C++ 中,可以重载 == 的自定义类型也应该使用值语义。例如

std::string x{"Foo"};
std::string y{"Foo"};
assert( x == y );
assert( &x != &y );

输入迭代器通常不知道输入在哪里结束。例如,std::istream_iterator 也是如此。在这种情况下启用 next != end 的一种可能方法是 operator++ 设置一些内部状态,表示已到达输入结束。然后next != end,只检查该标志是否设置在next(当然也需要end,即默认构造的迭代器是“特殊的”,尽管那是实现细节,基本上你只需要知道它有效;)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。