C std :: set无法在迭代器上使用运算符,因为编译错误
发布时间:2020-12-16 10:25:52 所属栏目:百科 来源:网络整理
导读:所以我在std :: set上遇到了一个奇怪的迭代器bug:我无法在没有编译错误的迭代器上做一个简单的事情,比如(它1) 尝试自己编译: void setBug(){ std::setint values; for (auto it = values.cbegin(); it != values.cend(); ++it) { if ((it + 1) != values.e
所以我在std :: set上遇到了一个奇怪的迭代器bug:我无法在没有编译错误的迭代器上做一个简单的事情,比如(它1)
尝试自己编译: void setBug() { std::set<int> values; for (auto it = values.cbegin(); it != values.cend(); ++it) { if ((it + 1) != values.end()) values.insert(*it / *(it + 1)); } } 错误:二进制表达式的操作数无效(‘std :: _ 1 :: _ tree_const_iterator *,long>’和’int’) 错误:二进制表达式的操作数无效(‘std :: _ 1 :: _ tree_const_iterator *,long>’和’int’) 编译器版本: 我找到了一个肮脏的解决方案:( auto it2 = it; –it)有效,但这真的很脏…… 有人解释一下吗? std :: set坏了吗? 谢谢. 解决方法
std :: set迭代器是
bidirectional iterators.这些不支持通过加法运算符进行递增.您需要逐步递增,或使用
std::next 或
std::advance ,两者在幕后执行相同操作.无论如何,此操作将为O(N).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |