Pow*_*r78 4 c++ compiler-construction iterator stl stdset
所以我在std :: set上遇到了一个奇怪的迭代器bug:我无法在没有编译错误的迭代器上做一个像(it + 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));
}
}
Run Code Online (Sandbox Code Playgroud)
错误:二进制表达式的无效操作数('std :: _ 1 :: _tree_const_iterator*,long>'和'int')if((it + 1)!= values.end())
错误:二进制表达式的无效操作数('std :: _ 1 :: _tree_const_iterator*,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坏了吗?
谢谢.
jua*_*nza 14
std::set迭代器是双向迭代器.这些不支持通过加法运算符的增量.您需要逐步增加,或使用std::next或std::advance两者在幕后执行相同操作.无论如何,此操作将为O(N).
| 归档时间: |
|
| 查看次数: |
1392 次 |
| 最近记录: |