减去X.begin()如何返回迭代器的索引?

jam*_*lou 2 c++ iterator stl

无法理解以下代码:

int data[5] = { 1, 5, 2, 4, 3 }; 
 vector<int> X(data, data+5); 
 int v1 = *max_element(X.begin(), X.end()); // Returns value of max element in vector 
 int i1 = min_element(X.begin(), X.end()) – X.begin(); // Returns index of min element in vector 
Run Code Online (Sandbox Code Playgroud)

不确定如何减去X.begin返回的迭代器返回max/min元素的索引?

Jas*_*n R 6

std::vector<T>::iterator满足RandomAccessIterator概念,这意味着它有一个operator-允许你减去两个迭代器并获得一个std::vector<T>::iterator::difference_type指示两个迭代器之间距离的概念.

std::vector<T>::iterator实际上可以使用指针作为迭代器来实现底层实现,在这种情况下,减法运算符只是在做指针运算.有没有要求对使用指针来实现迭代器,但它是一个潜在的设计.

其他容器的迭代器可能没有此功能.例如,std::set<T>::iterator仅满足BidirectionalIterator概念,该概念指定了比RandomAccessIterator概念更少丰富的功能集.