代码之家  ›  专栏  ›  技术社区  ›  Gab Royer

为什么std::list没有运算符[]?

  •  40
  • Gab Royer  · 技术社区  · 16 年前

    4 回复  |  直到 16 年前
        1
  •  78
  •   Pavel Minaev    16 年前

    std::list operator[] 这是骗人的,因为人们会试图积极使用它,然后你会看到这样的代码:

     std::list<int> xs;
     for (int i = 0; i < xs.size(); ++i) {
         int x = xs[i];
         ...
     }
    

    操作员[] 应该在摊销常数时间内完成(23.1.1[lib.sequence.reqmts]/12),这是可以实现的 vector deque ,但不是 list .

    std::advance

    int iter = xs.begin();
    std::advance(iter, i);
    int x = *iter;
    
        2
  •  3
  •   florin    16 年前

        3
  •  1
  •   Community Mohan Dere    5 年前

    Extending std::list

    “您的操作员[]是O(N)时间”-此 标准的std::list<>迈克尔 伯尔12月14日17:29

    不过,这是唯一的原因吗?

    编辑:正如人们所说,似乎更重要的是性能的一致性,而不是严格的性能。

        4
  •  0
  •   Mikhail Kalashnikov    12 年前

    实际上,由于两个原因,绝对没有理由不提供运算符[]或至少在(int)处提供方法: