如何解决C++ 设置迭代器错误:在集合中不匹配‘operator+=’
auto str=lower_bound(s.begin(),s.end(),n);
cout<<std::distance(s.begin()+1,str)+1;
为什么 +1
在 s.begin()
后不起作用?它表明 operator+
没有匹配项(操作数类型是 'std::set::iterator'...)
解决方法
std::set
迭代器是 bi-directional 迭代器,只需要实现 --
和 ++
运算符。 Random-access 迭代器实现了 +
/-
和 +=
/-=
运算符。
当迭代器未实现 operator+
时,您可以使用 std::advance()
或 std::next()
向前移动迭代器,例如:
auto str = std::lower_bound(s.begin(),s.end(),n);
auto iter = s.begin();
std::advance(iter,1);
cout << std::distance(iter,str) + 1;
auto str = std::lower_bound(s.begin(),n);
cout << std::distance(std::next(s.begin()),str) + 1;
,
A std::set::iterator
不支持 operator+
(它是支持 operator--
和 operator++
的 LegacyBidirectionalIterator),所以它在这里失败:
s.begin() + 1
跳过+1
,它会起作用,但它不会是一个单一的操作。我必须从 s.begin()
前进到 str
才能计算距离:
std::cout << std::distance(s.begin(),str);
注意:为了获得与 std::distance(s.begin() + 1,str) + 1;
相同的结果,如果它有效,您也必须跳过 +1
之后的 std::distance()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。