
尝试自己编译:
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::next或 std::advance,两者在幕后执行相同 *** 作.无论如何,此 *** 作将为O(N). 总结 以上是内存溢出为你收集整理的C std :: set无法在迭代器上使用运算符,因为编译错误全部内容,希望文章能够帮你解决C std :: set无法在迭代器上使用运算符,因为编译错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)