代码之家  ›  专栏  ›  技术社区  ›  Alexey Malistov

是否可以使用超出范围的RA迭代器?

  •  0
  • Alexey Malistov  · 技术社区  · 15 年前

    请考虑以下代码:

    typedef std::vector<int> cont_t; // Any container with RA-iterators
    typedef cont_t::const_iterator citer_t; // Random access iterator
    
    cont_t v(100);
    const int start = 15; // start > 0.
    citer_t it = v.begin() - start; // Do not use *it
    
    int a1 = 20, b1 = 30; // a1, b1 >= start
    int a2 = 30, b2 = 40; // a2, b2 >= start
    
    int x = std::min_element(it + a1, it + b1); // 
    int y = std::min_element(it + a2, it + b2); //
    int z = std::min_element(it + 15, it + 25); //
    ...
    

    可以使用随机访问迭代器吗 it 超出范围?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Kirill V. Lyadvinsky    15 年前

    根据C++标准24.1.5表76,您将在这里得到断言条件。

        2
  •  5
  •   Mike Seymour    15 年前

    当然可以编写代码来尝试使用超出范围的迭代器。运行代码将给出未定义的行为。根据库的实现,它可能抛出异常、访问随机内存位、触发保护故障或在CPU中启动热核爆炸。