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

C++ 设置迭代器错误:在集合中不匹配‘operator+=’

如何解决C++ 设置迭代器错误:在集合中不匹配‘operator+=’

auto str=lower_bound(s.begin(),s.end(),n);


cout<<std::distance(s.begin()+1,str)+1;

为什么 +1s.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 举报,一经查实,本站将立刻删除。