【问题标题】:STL list and iteratorsSTL 列表和迭代器
【发布时间】:2011-07-19 03:22:52
【问题描述】:

你好,我就是不能让它工作。我拥有 4 个成员的结构,并创建列表和迭代器:

std::list<structure> one;
std::list<structure>::iterator two;

现在我想访问元素:

one.end-1;
two = one.end()-1;

它不起作用 >.> 编译器抛出 14 个错误。

错误如下:

所有这些都类似于:

Glowne.cpp(105):错误 C2784: 'reverse_iterator<_ranit>::difference_type 标准::运算符-(常量 std::reverse_iterator<_ranit> &,const std::reverse_iterator<_ranit2> &)' : 无法推断出模板参数 'const std::reverse_iterator<_ranit> &' 从 'std::list<_ty>::_Iterator<_secure_validation>' 与 [ _Ty=客户, _Secure_validation=true]

一切都很好,谢谢你提到回方法,真的,你们很棒。

【问题讨论】:

    标签: c++ stl iterator


    【解决方案1】:

    双向迭代器(std::list 使用)不支持“指针运算”,仅支持单步:

    two = one.end();
    --two;
    

    另外,one.end-1; 声明完全没有效果,我会去掉它。

    【讨论】:

      【解决方案2】:

      如果您想要列表的最后一个元素,请使用back() 成员。

      【讨论】:

        【解决方案3】:

        List 不是随机访问容器,这意味着您不能在其迭代器上使用算术运算。

        要在列表中移动,您可以使用运算符++-- 将迭代器移动一个元素。 如果您想移动到任意位置,请改用其他东西,例如 std::vector。

        大多数容器都有front()back() 方法,用于访问第一个和最后一个元素。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-23
          • 2012-11-05
          • 1970-01-01
          • 1970-01-01
          • 2013-04-16
          • 2018-01-07
          • 2012-10-11
          相关资源
          最近更新 更多