我发现了一些我想理解的c++代码。在这个代码中,他们使用
int airplane = min_element(min_cost_airplane.begin(),
min_cost_airplane.end()) - min_cost_airplane.begin();
但我不知道这行代码到底能完成什么。CCD_ 1是一个矢量。我理解min_element函数,但我无法理解从末尾开始的-vector.boot。这行代码的结构常用吗?我所理解的是,这行代码将迭代器返回到向量中最小的元素,减去迭代器到向量的第一个元素。那么迭代器指向什么呢?有人能帮帮我吗?
std::min_element
算法返回一个迭代器。您可以取消引用该迭代器来访问";最小值";元素。相反,如果您想知道元素的索引,则需要将其计算为距离容器开头的距离。
对于随机访问迭代器,您可以减去迭代器来获得偏移量或索引值。这就是你的例子。还有一个std::distance
函数用于计算索引,但它也适用于非随机访问迭代器。例如:
auto iter = std::min_element(min_cost_airplane.begin(), min_cost_airplane.end());
int index = std::distance(min_cost_airplane.begin(), iter);
std::min_element
向给定范围内最小值的第一个实例返回迭代器。
begin
向容器中的第一个元素返回迭代器。
std::vector
迭代器的特殊性(它是一个随机访问迭代器(在于,您可以从另一个迭代器中减去一个,从而得出它们之间的元素距离(它是隐藏的指针算术(。为了更通用、更清晰,请编写
auto airplane = std::distance(
min_cost_airplane.begin(),
std::min_element(min_cost_airplane.begin(), min_cost_airplane.end())
);
std::min_element
用于查找范围[first,last]中的最小元素。
std::vector<int> v{3, 8, 4, 2, 5, 9};
std::vector<int>::iterator result = std::min_element(v.begin(), v.end());
//result iterator to the minimum value in vector v.
std::cout << "min element is: " << *result;
输出:最小元素为:2
注:向量v中的最小值为2。