随机访问迭代器 - 在C++中的vector.end() - vector.begin()= vector.size();

ash*_*haw 0 c++ iterator vector

我想写一些类似于以下代码的东西

class c{
  public:
    //...
    big_structure* find(int e){
        auto it = std::lower_bound(v1.begin(), v1.end(), e);
        return v2[it - v1.begin()];
    }
  private:
    std::vector<int> v1;            //v1 is sorted;
    std::vector<big_structure*> v2; //v2.size() = v1.size() + 1
}
Run Code Online (Sandbox Code Playgroud)

这是合法的,而且当e不在v1中时它会返回v2 [v1.size()]吗?

如果可能的话我不想特殊情况它== v1.end().

Mik*_*our 6

这是合法的,而且v2[v1.size()]e它不在时它会返回v1吗?

是.过去的随机访问迭代器可以与来自相同序列的其他迭代器一起使用算术,从而得到预期的结果.