为什么要使用'int index = min_element(vector.begin(), vector.end()) - vector.begin();'(c ++)

  • 本文关键字:vector begin end element int min index c++
  • 更新时间 :
  • 英文 :


我发现了一些我想理解的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。

最新更新