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

标签 c++ stl iterator

无法理解以下代码:

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 

不太确定减去 X.begin 返回的迭代器如何返回最大/最小元素的索引?

最佳答案

std::vector<T>::iterator满足RandomAccessIterator concept ,这意味着它有 operator-它允许您减去两个迭代器并获得 std::vector<T>::iterator::difference_type表示两个迭代器之间的距离。

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

其他容器的迭代器可能不具备此功能。例如,std::set<T>::iterator只满足BidirectionalIterator concept ,它指定了一组不如 RandomAccessIterator 概念丰富的功能。

关于c++ - 减去 X.begin() 如何返回迭代器的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38919315/

相关文章:

c++ - 编译使用 C++ 映射的代码时遇到问题

c++ - std::string(itr, itr) 应该做什么?

javascript - 使用生成器在 AngularJS 中使用 ng-repeat 进行迭代无法按预期工作

c++ - 如何在没有最后一个元素的情况下迭代列表

c++ - 在 C++03 中模拟显式转换

file - 如何将 STL 映射保存到文件

c++ - 使用 vector 数组在 C++ 中创建扫雷

c++ - 如何初始化 std::vector 数组?

c++ - 如何将文字传递给重载运算符

c++ - 如何将一个 cpp 文件中的 void 函数的值传递给另一个 cpp 文件中的另一个 void 函数?