我想知道向量中哪个元素是最小的,但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
时会出现问题。你也可以这样做:
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)))
向量成员保证被存储在连续的内存中,但这并不重要。
向量迭代器是随机访问迭代器,因此减去向量迭代器是可定义的(这将总是适用于符合标准的std::vector
)。
要将向量迭代器转换为指针,可以执行&*(vector-iterator)
,但这里没有必要。
vector::data
,否则您不需要关心这一点,而大多数情况下您也不应该这样做。 - Jabberwocky