代码之家  ›  专栏  ›  技术社区  ›  Searene

C++:迭代器列表.Read()引发错误

  •  2
  • Searene  · 技术社区  · 6 年前

    this stackoverflow question 并尝试了以下代码:

    std::list<int> v;
    std::list<int>::iterator iter = v.insert(v.begin(), 1);
    int i = iter - v.begin();
    

    error: invalid operands to binary expression
    

    有什么问题吗?如何让它工作?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Hatted Rooster    6 年前

    v.insert 返回一个列表迭代器,该列表迭代器只满足 BiDirectionalIterator . 这意味着 operator- 不是为它定义的。

    以获得您可以使用的距离 std::distance 取而代之的是:

    int diff = std::distance(v.begin(), iter);
    
        2
  •  3
  •   user7860670    6 年前

    列表容器迭代器不是随机访问迭代器,因此不提供子语句。你可以用 std::distance