如何解决交换时递增的迭代器std :: next
考虑代码:
list<int> a{ 4,3,1,2 };
auto i = a.begin();
swap(*i,*(++i));
为什么交换不执行任何操作?尽管以下各项按预期工作?
list<int> a{ 4,*(next(i)));
解决方法
在第一个代码中,两个操作*i
和*(++i)
unspecified after c++17的求值顺序,因此第二个操作可以在第一个操作之前执行,然后交换交换两个等效项值。
在附件链接中,您可以看到
f(++i,++i); // undefined behavior until C++17,unspecified after C++17
但是在第二个代码中,您有不同的参数,std::next()
返回了一个新的迭代器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。