C std :: set无法在迭代器上使用运算符,因为编译错误

C std :: set无法在迭代器上使用运算符,因为编译错误,第1张

概述所以我在std :: set上遇到了一个奇怪的迭代器bug:我无法在没有编译错误的迭代器上做一个简单的事情,比如(它1) 尝试自己编译: void setBug(){ std::set<int> values; for (auto it = values.cbegin(); it != values.cend(); ++it) { if ((i 所以我在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_i@R_419_6704@tor *,long>’和’int’)
if((it 1)!= values.end())

错误:二进制表达式的 *** 作数无效(‘std :: _ 1 :: _ tree_const_i@R_419_6704@tor *,long>’和’int’)
values.insert(* it / *(it 1));

编译器版本:
Apple LLVM 5.0版(clang-500.2.79)(基于LLVM 3.3svn)
目标:x86_64-apple-darwin13.1.0
线程模型:posix

我找到了一个肮脏的解决方案:( auto it2 = it; –it)有效,但这真的很脏……

有人解释一下吗? std :: set坏了吗?

谢谢.

解决方法 std :: set迭代器是 bidirectional iterators.这些不支持通过加法运算符进行递增.您需要逐步递增,或使用 std::nextstd::advance,两者在幕后执行相同 *** 作.无论如何,此 *** 作将为O(N). 总结

以上是内存溢出为你收集整理的C std :: set无法在迭代器上使用运算符,因为编译错误全部内容,希望文章能够帮你解决C std :: set无法在迭代器上使用运算符,因为编译错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1220088.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存