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

电源78

所以我只在std :: set上遇到了一个奇怪的迭代器错误:我无法在没有编译错误的情况下在迭代器上执行类似(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));
    }
}

错误:对二进制表达式无效的操作数('std :: _ 1 :: _tree_const_iterator *,long>'和'int')if((it + 1)!= values.end())

错误:对二进制表达式无效的操作数('std :: _ 1 :: _tree_const_iterator *,long>'和'int')值.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是否损坏?

谢谢。

juanchopanza

std::set迭代器是双向迭代器这些不支持通过加法运算符进行增量。您需要逐步增加,或使用std::nextstd::advance,这两种操作在后台都相同。无论该操作为O(N)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: set比较器错误:“无效的运算符<”

来自分类Dev

在C ++中定义和使用std :: map时发生编译错误

来自分类Dev

使用类的const成员的std :: deque :: erase编译错误

来自分类Dev

在gcc 4.7中使用std :: bind编译错误

来自分类Dev

尝试使用 std::result_of 时编译错误

来自分类Dev

在std :: bind中使用std :: bind:编译错误(隐式强制转换)

来自分类Dev

在std :: bind中使用std :: bind:编译错误(隐式强制转换)

来自分类Dev

<<运算符引发编译错误

来自分类Dev

在-std = c ++ 11上编译时,C ++“运算符>>不匹配”

来自分类Dev

C ++:无法理解编译错误

来自分类Dev

在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

来自分类Dev

在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

来自分类Dev

错误:预期为“;” 使用std :: vector <...> :: const_iterator无意义的编译错误?

来自分类Dev

使用C ++模板时的编译错误

来自分类Dev

C ++ std :: function运算符=

来自分类Dev

OS X上std :: enable_shared_from_this <>的编译错误

来自分类Dev

OS X上std :: enable_shared_from_this <>的编译错误

来自分类Dev

为什么std :: make_shared无法使用已删除的运算符new进行类型编译?

来自分类Dev

在默认参数中使用依赖范围作为std :: less类型的编译错误

来自分类Dev

在gmock 1.8对象中使用std :: variant时发生编译错误

来自分类Dev

使用std :: enable_if限制派生类的模板参数时发生编译错误

来自分类Dev

尝试使用SFINAE(std :: enable_if)和模板特化时出现编译错误

来自分类Dev

使用子类从 std::priority_queue 获取容器时编译错误

来自分类Dev

错误C2676:std :: set :: const_iterator没有运算符+功能?

来自分类Dev

Clang 3.5.0 std :: wregex编译错误

来自分类Dev

Clang 3.5.0 std :: wregex编译错误

来自分类Dev

在ostream'<<'-运算符重载中使用std :: endl以及带有变体成员的可变模板类会导致编译器错误

来自分类Dev

使用 set<set<int> > 迭代器的编译错误

来自分类Dev

g ++ 5中std :: unordered_set的类型不完整的编译错误,在clang ++中编译

Related 相关文章

  1. 1

    std :: set比较器错误:“无效的运算符<”

  2. 2

    在C ++中定义和使用std :: map时发生编译错误

  3. 3

    使用类的const成员的std :: deque :: erase编译错误

  4. 4

    在gcc 4.7中使用std :: bind编译错误

  5. 5

    尝试使用 std::result_of 时编译错误

  6. 6

    在std :: bind中使用std :: bind:编译错误(隐式强制转换)

  7. 7

    在std :: bind中使用std :: bind:编译错误(隐式强制转换)

  8. 8

    <<运算符引发编译错误

  9. 9

    在-std = c ++ 11上编译时,C ++“运算符>>不匹配”

  10. 10

    C ++:无法理解编译错误

  11. 11

    在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

  12. 12

    在模板函数返回类型上使用std :: enable_if以利用SFINAE-编译错误

  13. 13

    错误:预期为“;” 使用std :: vector <...> :: const_iterator无意义的编译错误?

  14. 14

    使用C ++模板时的编译错误

  15. 15

    C ++ std :: function运算符=

  16. 16

    OS X上std :: enable_shared_from_this <>的编译错误

  17. 17

    OS X上std :: enable_shared_from_this <>的编译错误

  18. 18

    为什么std :: make_shared无法使用已删除的运算符new进行类型编译?

  19. 19

    在默认参数中使用依赖范围作为std :: less类型的编译错误

  20. 20

    在gmock 1.8对象中使用std :: variant时发生编译错误

  21. 21

    使用std :: enable_if限制派生类的模板参数时发生编译错误

  22. 22

    尝试使用SFINAE(std :: enable_if)和模板特化时出现编译错误

  23. 23

    使用子类从 std::priority_queue 获取容器时编译错误

  24. 24

    错误C2676:std :: set :: const_iterator没有运算符+功能?

  25. 25

    Clang 3.5.0 std :: wregex编译错误

  26. 26

    Clang 3.5.0 std :: wregex编译错误

  27. 27

    在ostream'<<'-运算符重载中使用std :: endl以及带有变体成员的可变模板类会导致编译器错误

  28. 28

    使用 set<set<int> > 迭代器的编译错误

  29. 29

    g ++ 5中std :: unordered_set的类型不完整的编译错误,在clang ++中编译

热门标签

归档