如何获得向量中最小元素的索引?

时间:2019-03-22 17:23:36

标签: c++ vector

我想知道vector的哪个元素是最小值,但是min_element将迭代器返回到该元素。所以我尝试了这个:

vector<int> vec = {4,5,0,1,2,3} ;
int min_element_index = min_element(vec.begin(), vec.end()) - vec.begin();

但是,我不确定这将始终有效。我不知道向量是如何存储在内存中的,我担心当我使用push_back时会中断。

2 个答案:

答案 0 :(得分:10)

您也可以这样做:

std::vector<int>::iterator it = std::min_element(std::begin(vec), std::end(vec));
std::cout << "index of smallest element: " << std::distance(std::begin(vec), it);

或更简单:

auto it = std::min_element(std::begin(vec), std::end(vec));
std::cout << "index of smallest element: " << std::distance(std::begin(vec), it);

或:

std::cout << "index of smallest element: " <<
std::distance(std::begin(v), std::min_element(std::begin(v), std::end(v)))

答案 1 :(得分:3)

保证矢量成员存储在连续内存中,这在这里并不重要。

向量迭代器是随机访问迭代器,因此减去向量迭代器的定义很明确(这将始终与符合标准的std::vector一起使用)

要将向量迭代器转换为指针,可以执行&*(vector-iterator),但是这里没有理由。